论坛首页 Java企业应用论坛

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

浏览 8859 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-09-24  
各位 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,需梯子)



  • 大小: 557.7 KB
   发表时间:2012-09-25  
怎么感觉像BUG一样?
0 请登录后投票
   发表时间:2012-09-25  
姑苏痴情 写道
怎么感觉像BUG一样?

不是bug,这是 happen-before 原则推断的结果
0 请登录后投票
   发表时间:2012-09-25  
<<java 并发编程实战>> 不多说了.
0 请登录后投票
   发表时间:2012-09-25  
冰冷缠绵 写道
<<java 并发编程实战>> 不多说了.

这种回帖总是让我诚惶诚恐、胆战心惊。
你指的的是哪个章节?能否明确下,这样我们没看过的也可以查阅下嘛
0 请登录后投票
   发表时间:2012-09-25  
好像看过。。。在哪本书看过
0 请登录后投票
   发表时间:2012-09-25  
锁一个对象, 并操作这个对象,  就这么简单,  为啥叫 第三作用呢。
0 请登录后投票
   发表时间:2012-09-25  
这是java内存模型的内容了,没什么稀奇的
0 请登录后投票
   发表时间:2012-09-25  
刚刚测试了下,无论是a还是b
r2都是正确的,未出现预料外情况,都是1

ubuntu 10.10 64bit
jdk7u7 64bit
0 请登录后投票
   发表时间:2012-09-25  
E~~楼主不是我当年的幼稚园大大班班长吗? 怎么跑这来了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics