请稍等 ...
×

采纳答案成功!

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

volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。

老师这句话我不是很理解,如果线程1对volatile共享变量A=0写变成A=1,线程2对volatile共享变量A读,两者同时start()。
那线程2是一定会读到线程1写之后的值么?A=1
还是说有可能读到修改之前的值?A=0

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

1回答

翔仔 2019-10-13 00:05:38

同学好,happends-before只是说前一个操作对后续操作可见,并不保证顺序。比如说你的线程1先于线程2执行,那么线程1执行的结果对线程2是可见的,反之亦然

0 回复 有任何疑惑可以回复我~
  • 既然前一个操作的结果都对后一个操作可见了,就说明前一个操作执行完毕,才对后一个操作可见,那为什么还不能保证顺序呢?难道逻辑不应该是:
    前一个操作执行完毕—>结果—>后一个操作可见—>后一个操作执行
    ;
    百思不得其解.......
    回复 有任何疑惑可以回复我~ 2019-12-02 23:20:46
  • 这里只是针对前面同学的回答,该同学的问题是:"如果线程1对volatile共享变量A=0写变成A=1,线程2对volatile共享变量A读,两者同时start()。
    那线程2是一定会读到线程1写之后的值么?A=1
    还是说有可能读到修改之前的值?A=0"
    我想要表达的是,如果线程1先写,那么线程2肯定能读到变化,反之则线程2不会读到变化。所以volatile并没有保证这里同时start后,线程1和线程2的执行顺序,只能说如果线程1先执行的话,线程2执行的时候肯定能读到最新的结果。也就是说对一个volatile域的写,happens-before于任意后续对这个volatile域的读
    回复 有任何疑惑可以回复我~ 2019-12-03 00:12:57
  • 好的老师,其实我想问的也是happens before的,看有类似问题就在这里问了。看网上说happens before保证可见性,还有的说保证顺序性,自己也对比了一下发现二者都有道理,请问老师到底是怎么样的呢
    回复 有任何疑惑可以回复我~ 2019-12-03 00:16:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信