多线程读写变量
线程A正在修改value。线程B正在读,这里读的就是过期的数据了。
只有给get,set同时加上同步才可以保证读到的不是过期数据。不明白,为什么get,set同时加上同步可以保证不出现这种情况?
继续往下看,好像明白一点,共享变量在公共的锁中是相互可见的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
加了同步也不能保证读到非过期的数据,问题不在这里。同步的作用是不会读到不完整的数据,这才是互斥的原因,int的更新未必是原子操作。
AtomicInteger,不需要synchronized,这种类型的一旦开始,就一直运行到结束,中间不会有任何Context switch
参见Synchronized Methods:
也就是说加锁的第二个作用是保证了内存壁垒。