Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将变量标记为volatile是否使其线程安全?_Java_Thread Safety_Volatile - Fatal编程技术网

Java 将变量标记为volatile是否使其线程安全?

Java 将变量标记为volatile是否使其线程安全?,java,thread-safety,volatile,Java,Thread Safety,Volatile,在谷歌搜索和阅读StackOverflow帖子之后,我不清楚将变量标记为volatile是否会使其线程安全 是吗?总之,不是 将变量标记为volatile可以解决“安全发布”的问题,其中一个线程对变量所做的更改可以被所有其他线程看到(也有其他方法)。当一个变量不是易变的时,没有这样的保证 安全发布只是多线程编程的挑战之一——还有其他挑战。为什么对易失性变量所做的更改对其他线程可见而对非易失性变量所做的更改不可见?作为一种优化,可以将变量值从主内存复制到执行线程的CPU/内核上。这类似于从磁盘向内

在谷歌搜索和阅读StackOverflow帖子之后,我不清楚将变量标记为
volatile
是否会使其线程安全

是吗?

总之,不是

将变量标记为volatile可以解决“安全发布”的问题,其中一个线程对变量所做的更改可以被所有其他线程看到(也有其他方法)。当一个变量不是易变的时,没有这样的保证


安全发布只是多线程编程的挑战之一——还有其他挑战。

为什么对易失性变量所做的更改对其他线程可见而对非易失性变量所做的更改不可见?作为一种优化,可以将变量值从主内存复制到执行线程的CPU/内核上。这类似于从磁盘向内存中读取一个值并在那里对其进行操作,而不是不断地读写磁盘。当一个变量被标记为volatile时,每当线程读取该变量时,它的当前值就会被刷新回主存。