synchronized的第三个作用。估计80%的Java开发者都不知道

各位 Java 开发者,synchronized 竟然还有这作用,作 Java 开发的有多少人知道(今天刚刚知道的)。发出来给大家看看:

“线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 所有修改。注意:不只是 线程B在 synchronized块中所作的修改,还包含 线程B在进入synchronized之前的所有修改 也都能看到”

http://www.iteye.com/topic/875420 在讲述DCL时,里面的情形四 清楚的谈到了这种情况。这里单独开个帖列出来。

这样,synchronized就有了三个作用
1、作为互斥锁使用(synchronized所持有的锁,同一个时刻只能由一个线程所占有)
2、对于同步块内部访问到的数据,进入前和出来后,强制cache和main memory进行同步
3、线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 所有修改

下面这张图,上部分截取自 JSR-133,下部分截取自 JEREMY MANSON(JSR-133作者之一)的一次讲课( http://www.youtube.com/watch?v=WTVooKLLVT8&feature=g-wl,需梯子)



猜你喜欢

转载自iceman1952.iteye.com/blog/1684645