【发布时间】:2016-06-05 20:18:03
【问题描述】:
如果多个线程同时读取一个字段,我是否只需要将其标记为 volatile?
如果线程A改变了一个字段的值,线程B在保证线程A完成后评估它呢?
在我的场景中,是否强制执行发生前的关系(没有 volatile 关键字)?
【问题讨论】:
-
如果线程B执行了A.join(),那么读取变量就是线程A写入的值,变量不需要是volatile的。
-
从 B 的角度来看,如何保证线程 A 已经完成?
-
我正在考虑的更详细的例子:主线程有一个 ExecutorService 提交 Runnable A。主线程检查 Runnable A 上在异步运行时更改的字段。我们通过在返回的 Future 上调用 get() 来保证线程已完成。
-
在没有 volatile 的情况下发生之前发生的最直接的方法当然是使用同步
标签: java multithreading volatile