请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

synchronized保证可见性,原子性,近朱者赤 问题?

图片描述这里首先在change方法中对d=6进行赋值的时候使用synchronized进行加锁。然后在print方法中对a进行赋值的时候。也首先进行加锁。这样的代码能实现什么效果?并不能保证第二个线程在打印的时候第一个线程执行完change方法并对a,b,c,d完全赋值成功?可能在change方法的执行的时候,刚刚执行c=5,还没执行synchronized(this){ d = 6;}.这个时候cpu切换到另一个线程中,另一个线程一定能获取到对应的锁。然后进行执行。那么int dd = d;就有可能出现不是预期的效果?

不太理解老师这个例子是想怎样表达可见性的?用volatile 修饰,使用触发器的方式还是可以理解的。另一个线程在执行的时候先有判断的。这里该怎么理解

正在回答 回答被采纳积分+3

1回答

悟空 2019-09-20 11:05:33

对,这里想表达的和volatile类似,前提是如果d=6已经执行了,那么a b c的最新值下面的print都能看到。这里只是顺带把synchronized的可见性说一下,实际中会采用volatile的触发器来实现。

3 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信