【发布时间】:2023-12-31 08:30:01
【问题描述】:
我对 Java 中 volatile 关键字的用法感到困惑。我在互联网上阅读了很多文章,但仍然一无所获。我脑子里有很多问题想问:
首先,*和许多博客都说所有volatile 变量都存储在一个线程本地内存,在所有线程共享的主内存上!我有点困惑,它们是指stack memory 吗?我知道每个线程都有自己的stack memory,它存储自己的原始文字和对象引用。
如果是这样,那么如果 volatile 变量是对象引用而不是原始文字会发生什么?我猜所有的对象都存储在堆空间而不是堆栈内存中。
其次,您能否通过示例详细说明volatile 关键字的工作原理以及我们应该何时使用它?
【问题讨论】:
-
您在哪里读到 volatile 变量存储在线程本地内存中?我在*条目中没有看到这样的断言。
-
“*和许多博客都说所有易失性变量都存储在线程本地内存中,而不是所有线程共享的主内存!”。请提供带有链接的引用。这听起来不对。
-
The Java Tutorials: Atomic Access 和 Java theory and practice: Managing volatility 比*更适合阅读
volatile。 -
en.wikipedia.org/wiki/Volatile_variable#In_Java :没有说明你所说的内容。
-
我想我犯了一个大错误,我不得不说 volatile 变量存储在主内存中,而不是本文中所说的线程本地内存中:javamex.com/tutorials/synchronization_volatile.shtml我的应用. @Stephen C:这是一个谈论线程本地内存的例子。现在,线程本地内存和进程缓存内存有什么区别?!
标签: java jvm thread-safety heap-memory volatile