为了账号安全,请及时绑定邮箱和手机立即绑定

多线程读写变量

多线程读写变量

qq_笑_17 2019-03-21 18:19:25
线程A正在修改value。线程B正在读,这里读的就是过期的数据了。只有给get,set同时加上同步才可以保证读到的不是过期数据。不明白,为什么get,set同时加上同步可以保证不出现这种情况?继续往下看,好像明白一点,共享变量在公共的锁中是相互可见的。
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

加了同步也不能保证读到非过期的数据,问题不在这里。同步的作用是不会读到不完整的数据,这才是互斥的原因,int的更新未必是原子操作。


查看完整回答
反对 回复 2019-04-15
?
慕慕森

TA贡献1856条经验 获得超17个赞

AtomicInteger,不需要synchronized,这种类型的一旦开始,就一直运行到结束,中间不会有任何Context switch


查看完整回答
反对 回复 2019-04-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

参见Synchronized Methods:

Second, when a synchronized method exits, it automatically establishes a happens-before relationship with any subsequent invocation of a synchronized method for the same object. This guarantees that changes to the state of the object are visible to all threads.

也就是说加锁的第二个作用是保证了内存壁垒。


查看完整回答
反对 回复 2019-04-15
  • 3 回答
  • 0 关注
  • 561 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号