class MyClass {
private int value;
private void someFunction()
{
// value will never be assigned anywhere else while the thread is running
this.value = 10;
// start thread that reads value
}
}
这需要一个volatile还是保证看到最新值的线程?
答案 0 :(得分:5)
这需要一个volatile还是保证看到最新值的线程?
不,volatile
不是必需的。该Java语言定义表明,创建的线程将在调用start()
之前看到创建线程所做的所有更新。
见Synchronization Order (JLS 17.4.4)。引用:
- 启动线程的操作与其启动的线程中的第一个操作同步。
显然,如果值在start()
之后更新,或者如果新线程更改了起始线程需要看到的值,则需要进行内存同步。
如果您致电thread.join()
,情况也是如此。在join()
返回后,调用者可以看到由加入的线程所做的任何更新。