好友
阅读权限20
听众
最后登录1970-1-1
|
ing
发表于 2022-4-6 22:59
本帖最后由 ing 于 2022-4-7 10:31 编辑
----------------------------------------------------------------------文末已得出问题的结论,如果有误还请指正----------------------------------------------------------------------
我不知道为什么子线程休眠一段时间再修改flag就会导致主线程读取的flag变量一直都是未修改过的值(为什么子线程休眠会造成程序执行结果的不同?)
这张图片的解释让我更加迷惑,第四段说while是底层代码执行速度快到没时间读取主存的值所以主线程的值从主线程的工作内存读取,这样就导致主线程看不到最新值(即图2执行的结果);
可是如果 线程休眠 被注释掉,主线程却可以看到修改后的值(即图1执行的结果),这是为什么?
___________________________________________________________________________
为什么子线程休眠会造成程序执行结果的不同,这是我得出的结论
让子线程休眠一段时间确保子线程和主线程从主内存拷贝变量副本到各自工作内存的时候都是一致的false,避免主线程读取到工作内存中的是子线程修改后的值(flag=true);
我试过多次执行 图2 注释掉休眠后的代码,我想如果主线程在子线程执行flag=true之前执行到了get方法读取flag值(false),那么就可以达到图1的效果(实际上,如果不休眠子线程,flag=true的执行速度太快即使多次执行也未能触发图1的效果) |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|