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,或者线程是否保证看到最新的值?
这是否需要volatile,或者线程是否保证看到最新的值?
否,不需要volatile
。Java语言定义表示,在调用start()
之前,创建的线程将看到创建线程所做的所有更新。
参见同步订单(JLS 17.4.4)。报价:
- 启动线程的操作与它启动的线程中的第一个操作同步
显然,如果值在start()
之后更新,或者如果新线程对启动线程需要查看的值进行了更改,则需要内存同步。
如果调用thread.join()
,情况也是如此。在join()
返回后,调用方会看到与联接的线程所做的任何更新。