Gra*_*ity 6 java concurrency multithreading thread-safety
我想知道在Java中创建新线程是否会触发缓存刷新.假设我按照以下顺序执行此类操作:
我的问题是:是新的线程,无论是在当时这是创建或在当时开始执行,保证看到由旧线在步骤1到X所做的更新?我知道如果旧线程将来更改X的值,则无法保证新线程将看到这些更改.没关系.我只是想知道新线程在启动时是否会看到正确的值,而不需要显式同步.
当我第一次决定调查这个主题时,我认为一个简单的谷歌搜索会立即显示答案,但由于某种原因,我找不到任何解决这个问题的结果.
是的.
在java中,有'before-before'关系,指定两个动作之间可见的记忆效果.如果"A发生在B之前",则动作B保证看到动作A完成的所有更改.
启动一个线程会在"thread.start()"调用和在新线程上执行的所有代码之间创建"之前发生"关系.因此,保证新线程在第一个线程上看到更改变量X的记忆效应.
有关发生在之前的关系的快速概述,请参阅java.util.concurrent包概述中的内存可见性部分.在您的情况下,有趣的位是:
如果你好奇,可以使用更多链接:
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |