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

synchronized讲的有问题呀!这样做并不能实现可见性呀!不要误人子弟呀

synchronized讲的有问题呀!这样做并不能实现可见性呀!不要误人子弟呀

正在回答

4 回答

呵呵,提问者没搞懂,大家不要被这个人带偏了,他才在误人子弟!估计提问者是想说内存可见了,怎么还会执行结果不一致呢?谁说过保证了内存可见性就保证执行结果是一致的??别人是内部线程类,视频里read()操作和write()操作加了synchronized是原子性的,但是又不保证read()和write()哪个先执行,所以会出现2个结果,如果是先read()执行,那么result就是0,如果write()先执行,那么result就是6。最后老师通过延时保证write()先执行,结果就是只有6。建议多学习,少抱怨,只是能力不足,不要说老师不行哈。

4 回复 有任何疑惑可以回复我~
#1

慕的地3745111

说的没错
2018-10-15 回复 有任何疑惑可以回复我~

似乎没搞懂不要乱说

0 回复 有任何疑惑可以回复我~

        synchronized不仅可以解决一个线程看到对象处于不一致的状态,还可以保证进入同步方法或者同步代码块中的每个线程都看到由同一个锁保护之前所有的修改效果。这就是synchronized的互斥性可见性

        老师讲的也说的很清楚啊:

线程执行互斥代码的过程:

  1. 获得互斥锁

  2. 清空工作内存

  3. 从主内存拷贝变量的最新副本到线程工作内存

  4. 执行代码

  5. 将更改后的最新的共享变量的值刷新到主内存

  6. 释放互斥锁

0 回复 有任何疑惑可以回复我~
#1

洋__

呵呵,提问者没搞懂,大家不要被这个人带偏了,他才在误人子弟!估计提问者是想说内存可见了,怎么还会执行结果不一致呢?谁说过保证了内存可见性就保证执行结果是一致的??别人是内部线程类,视频里read()操作和write()操作加了synchronized是原子性的,但是又不保证read()和write()哪个先执行,所以会出现2个结果,如果是先read()执行,那么result就是0,如果write()先执行,那么result就是6。最后老师通过延时保证write()先执行,结果就是只有6。建议多学习,少抱怨,只是能力不足,不要说老师不行哈。
2018-10-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

synchronized讲的有问题呀!这样做并不能实现可见性呀!不要误人子弟呀

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信