采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师这句话我不是很理解,如果线程1对volatile共享变量A=0写变成A=1,线程2对volatile共享变量A读,两者同时start()。 那线程2是一定会读到线程1写之后的值么?A=1 还是说有可能读到修改之前的值?A=0
同学好,happends-before只是说前一个操作对后续操作可见,并不保证顺序。比如说你的线程1先于线程2执行,那么线程1执行的结果对线程2是可见的,反之亦然
既然前一个操作的结果都对后一个操作可见了,就说明前一个操作执行完毕,才对后一个操作可见,那为什么还不能保证顺序呢?难道逻辑不应该是: 前一个操作执行完毕—>结果—>后一个操作可见—>后一个操作执行 ; 百思不得其解.......
这里只是针对前面同学的回答,该同学的问题是:"如果线程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域的读
好的老师,其实我想问的也是happens before的,看有类似问题就在这里问了。看网上说happens before保证可见性,还有的说保证顺序性,自己也对比了一下发现二者都有道理,请问老师到底是怎么样的呢
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14