synchronized保证可见性,原子性,近朱者赤 问题?
来源:13-6 可见性

油腻!
2019-09-20
这里首先在change方法中对d=6进行赋值的时候使用synchronized进行加锁。然后在print方法中对a进行赋值的时候。也首先进行加锁。这样的代码能实现什么效果?并不能保证第二个线程在打印的时候第一个线程执行完change方法并对a,b,c,d完全赋值成功?可能在change方法的执行的时候,刚刚执行c=5,还没执行synchronized(this){ d = 6;}.这个时候cpu切换到另一个线程中,另一个线程一定能获取到对应的锁。然后进行执行。那么int dd = d;就有可能出现不是预期的效果?
不太理解老师这个例子是想怎样表达可见性的?用volatile 修饰,使用触发器的方式还是可以理解的。另一个线程在执行的时候先有判断的。这里该怎么理解
写回答
1回答
-
悟空
2019-09-20
对,这里想表达的和volatile类似,前提是如果d=6已经执行了,那么a b c的最新值下面的print都能看到。这里只是顺带把synchronized的可见性说一下,实际中会采用volatile的触发器来实现。
30
相似问题