各位 Java 开发者,synchronized 竟然还有这作用,作 Java 开发的有多少人知道(今天刚刚知道的)。发出来给大家看看:
[b]“线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 [color=red]所有修改[/color]。注意:不只是 线程B在 synchronized块中所作的修改,还包含 线程B在进入synchronized之前的所有修改 也都能看到”[/b]
[url]http://www.iteye.com/topic/875420[/url] 在讲述DCL时,里面的情形四 清楚的谈到了这种情况。这里单独开个帖列出来。
这样,synchronized就有了三个作用
1、作为互斥锁使用(synchronized所持有的锁,同一个时刻只能由一个线程所占有)
2、对于同步块内部访问到的数据,进入前和出来后,强制cache和main memory进行同步
3、线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 [b][color=red]所有修改[/color][/b]
下面这张图,上部分截取自 JSR-133,下部分截取自 JEREMY MANSON(JSR-133作者之一)的一次讲课([url]http://www.youtube.com/watch?v=WTVooKLLVT8&feature=g-wl[/url],需梯子)
[img]http://dl.iteye.com/upload/attachment/0074/2865/77cf6559-4e5a-3afa-9f72-0faa0381640c.png[/img]
[b]“线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 [color=red]所有修改[/color]。注意:不只是 线程B在 synchronized块中所作的修改,还包含 线程B在进入synchronized之前的所有修改 也都能看到”[/b]
[url]http://www.iteye.com/topic/875420[/url] 在讲述DCL时,里面的情形四 清楚的谈到了这种情况。这里单独开个帖列出来。
这样,synchronized就有了三个作用
1、作为互斥锁使用(synchronized所持有的锁,同一个时刻只能由一个线程所占有)
2、对于同步块内部访问到的数据,进入前和出来后,强制cache和main memory进行同步
3、线程A的lock操作 能看见 线程B对同一个对象unlock操作之前的 [b][color=red]所有修改[/color][/b]
下面这张图,上部分截取自 JSR-133,下部分截取自 JEREMY MANSON(JSR-133作者之一)的一次讲课([url]http://www.youtube.com/watch?v=WTVooKLLVT8&feature=g-wl[/url],需梯子)
[img]http://dl.iteye.com/upload/attachment/0074/2865/77cf6559-4e5a-3afa-9f72-0faa0381640c.png[/img]