蛋蛋的忧伤

Java多线程编程之脏读

发表于:2019-2-27 14:15:19 点击量:0 赞:未知

脏读 一定会出现操作实例变量的情况下,这就是不用线程“争抢”实例变量的结果。

  1. 当A先成调用anyObject对象加入synchronized 关键字的X方法时,A线程就获得了X方法锁,更准确地讲,是获得了对象的锁,所以其他线程必须等A线程执行完毕才可以调用X方法,但B线程可以随意的调用其他的非synchronized同步方法。

  2. 当A线程调用anyObject对象加入synchronized关键字的X方法是,A线程就获得了X方法所在对象的的锁,所以其他线程必须等A线程执行完毕才可以调用X方法,而B线程如果调用声明了synchronized关键字的非X方法时,必须等A线程将X方法执行完,也就是释放对象锁后才可以调用。这时A线程已经执行了一个完整的任务,也就是说对象内部操作同步执行,不存在脏读的基本环境。

解决脏读的方式:需要调用的方法加上同步synchronized关键字

TCP连接数:, IP数:
    发 送