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

来源:3-4 synchronized实现可见性代码(下)

無無

2016-11-01 11:24

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

写回答 关注

4回答

  • 洋__
    2018-10-07 12:48:21

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

    慕的地374...

    说的没错

    2018-10-15 16:58:55

    共 1 条回复 >

  • 慕雪5558698
    2017-06-29 12:01:45

    似乎没搞懂不要乱说

  • iceWang
    2016-11-16 12:13:27

    那么你说是哪里有问题呢??

  • 小柒木有熙
    2016-11-07 16:45:44

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

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

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

    1. 获得互斥锁

    2. 清空工作内存

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

    4. 执行代码

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

    6. 释放互斥锁

    洋__

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

    2018-10-07 12:48:54

    共 1 条回复 >

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55910 学习 · 74 问题

查看课程

相似问题