请稍等 ...
×

采纳答案成功!

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

7-2

老师,这一节使用了synchronized修饰方法,已经保证了修改变量的可见性,可以使用volatile修饰变量,对吗?
还有个问题就是,CAS修改的变量必须要使用volatile保证可见性吗,CAS和volatile有什么关系呢?

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

1回答

悟空 2020-02-10 00:47:35

退出synchronized之后,才能保证变量的可见性,所以加volatile是有必要的。

CAS的变量需要用volatile修饰,以便在各线程之间保证可见。

1 回复 有任何疑惑可以回复我~
  • 退出synchronized之后,别的线程拿到锁,根据happens-before原则,就能看到变量更新后的值。为什么还要加volatile?
    回复 有任何疑惑可以回复我~ 2020-03-11 21:19:27
  • 悟空 回复 慕沐3053333 #2
    退出synchronized块之前happens-before原则不生效
    回复 有任何疑惑可以回复我~ 2020-03-12 00:22:21
  • 慕沐3053333 回复 悟空 #3
    可是在TwoThreadsCompetition这个例子中,退出synchronized块之前不会有别的线程能修改的了变量value的值,因为他们都拿不到锁被阻塞等待呀,所以在这个例子中变量value不用volatile修饰也不会发生可见性的问题,对吧?
    回复 有任何疑惑可以回复我~ 2020-03-12 08:47:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信