采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这里的this是代表“本对象”,在本例中起到锁对象的作用
第二个synchronized为什么是锁住 int aa =a; 我的想法是 ,第二个 synchronized 改成 synchronized (this) { int dd = d; int cc = c; int bb = b; int aa = a; } 这么改的想法是,既然线程A把 d 作为内存屏障的终点,那么线程B就应该首先找到内存屏障的终点 d,保证 c b a 都来自同一批“以d为终点的”赋值操作。
线程2不需要一定要d作为起点,只要进入了同步块,都是可见的。
这里是触发器,不是强同步。不过这里不需要纠结,只要理解前面的volatile的触发器就可以了。
我把synchronized当做volatile来理解,修改成以下代码,跑了一晚上也没有出现b=3;a=1的情况,
这样理解对吧
int a = 1;int b = 2;public void change() { a = 3; synchronized (this) { b = a; }}
恩对的
登录后可查看更多问答,登录/注册
完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题
1.9k 26
889 12
1.1k 12
2.5k 12
1.1k 11