Java 如果访问线程是由先前分配变量的同一线程创建的,是否需要volatile?

Java 如果访问线程是由先前分配变量的同一线程创建的,是否需要volatile?,java,multithreading,thread-safety,volatile,Java,Multithreading,Thread Safety,Volatile,这是需要volatile还是保证线程可以看到最新的值 这是需要volatile还是保证线程可以看到最新的值 否,volatile不是必需的。Java语言定义说,在调用start()之前,创建的线程将看到创建线程所做的所有更新 看。引述: 启动线程的操作与它启动的线程中的第一个操作同步 显然,如果值是在start()之后更新的,或者如果新线程更改了启动线程需要查看的值,则需要内存同步 如果调用thread.join(),同样适用。在join()返回后,调用方将看到与连接的线程所做的任何更新 这

这是需要volatile还是保证线程可以看到最新的值

这是需要volatile还是保证线程可以看到最新的值

否,
volatile
不是必需的。Java语言定义说,在调用
start()
之前,创建的线程将看到创建线程所做的所有更新

看。引述:

  • 启动线程的操作与它启动的线程中的第一个操作同步
显然,如果值是在
start()
之后更新的,或者如果新线程更改了启动线程需要查看的值,则需要内存同步

如果调用
thread.join()
,同样适用。在
join()
返回后,调用方将看到与连接的线程所做的任何更新

这是需要volatile还是保证线程可以看到最新的值

否,
volatile
不是必需的。Java语言定义说,在调用
start()
之前,创建的线程将看到创建线程所做的所有更新

看。引述:

  • 启动线程的操作与它启动的线程中的第一个操作同步
显然,如果值是在
start()
之后更新的,或者如果新线程更改了启动线程需要查看的值,则需要内存同步


如果调用
thread.join()
,同样适用。在
join()
返回后,调用方将看到所加入的线程所做的任何更新。

您正在启动的线程是否可以更改该值,还是仅读取该值?如果该值在创建线程后从未更改,则不必将其设置为
易失性
。但是,如果值已更改(即使父线程进行了更改),则应将其声明为
volatile
。您正在启动的线程是否可以更改该值,还是仅读取该值?如果该值在创建线程后从未更改,则不必将其设置为
volatile
。但是,如果该值已更改(即使父线程进行了更改),则应将其声明为
volatile
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
    }
}