美文网首页
1.7.7释放锁的不良后果

1.7.7释放锁的不良后果

作者: 农家男孩 | 来源:发表于2017-06-26 22:47 被阅读0次

使用stop()释放锁将会给数据造成不一致的结果。如果出现这样的情况,程序处理的数据就有可能遭到破坏,最终导致程序执行的流程出错,一定要特别注意。

/**
 * @author wuyoushan
 * @date 2017/3/27.
 */
public class SynchronizedObject {
    private String username="a";
    private String password="aa";

    public void printString(String username,String password){
        try{
            this.username=username;
            Thread.sleep(100000);
            this.password=password;
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

/**
 * MyThread线程测试
 * @author wuyoushan
 * @date 2017/3/21.
 */
public class MyThread extends Thread {

    private SynchronizedObject object;

    public MyThread(SynchronizedObject object) {
        this.object = object;
    }

    @Override
    public void run() {
       object.printString("b","bb");
    }
}

/**
 * @author wuyoushan
 * @date 2017/3/20.
 */
public class Run {
    public static void main(String[] args){
        try{
            SynchronizedObject object=new SynchronizedObject();
            MyThread thread=new MyThread(object);
            thread.start();
            Thread.sleep(500);
            thread.stop();
            System.out.println(object.getUsername()+" "+object.getPassword());
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}

程序的运行结果如下:

b aa

由于stop()方法已经在JDK中被标明是“作废/过期”的方法,显然它在功能上具有缺陷,所以不建议在程序中使用stop()方法

摘选自 java多线程核心编程技术-1.7.7

相关文章

  • 1.7.7释放锁的不良后果

    使用stop()释放锁将会给数据造成不一致的结果。如果出现这样的情况,程序处理的数据就有可能遭到破坏,最终导致程序...

  • Debian ovirt 源码编译

    编译步骤 解压tar xzvf otopi-1.7.7.tar.gzconfigurecd otopi-1.7.7...

  • AbstractQueuedSynchronizer 源码解析

    1 释放锁 释放锁的触发时机就是我们常用的Lock.unlock()方法,目的就是让线程释放对资源的访问权。释放锁...

  • Java 内存模型-锁的内存语义

    章节目录 锁的释放-获取建立的 happens-before 关系 锁的释放-获取的内存语义 锁的释放-获取 建立...

  • Synchronized的原理分析

    Java多线程运行环境中,在哪些情况下会使对象锁释放?释放锁: 不释放锁的情况: interrupted()和is...

  • 线程状态

    sleep,yield 不释放锁 运行结果: wait释放锁 运行结果:

  • synchronized、ReentrantLock,retur

    ReentrantLock(手动释放锁:lock.unLock();),return不会释放锁 synchroni...

  • join/wait/sleep的区别

    join方法内部是通过wait进行阻塞的,所以join和wait都会释放锁。而sleep不释放锁,sleep的锁是...

  • 并发 - Java中的锁

    一、概述 锁的使用与实现 Lock接口(显式地获取锁和释放锁) 拥有了锁获取与释放的可操作性、可中断的获取锁以及超...

  • Java并发:await/wait 与sleep、yield间的

    是否释放锁:调用sleep和yield的时候不释放当前线程所获得的锁,但是调用await/wait的时候却释放了其...

网友评论

      本文标题:1.7.7释放锁的不良后果

      本文链接:https://www.haomeiwen.com/subject/zhcscxtx.html