Java中volatile的确切含义和作用是什么?

25 浏览
0 Comments

Java中volatile的确切含义和作用是什么?

这个问题已经有了答案:

volatile关键字有什么用?

这个问题的灵感来自于为什么BufferedInputStream会将字段复制到本地变量而不是直接使用字段的问题。

其中一个答案是关于\"volatile\"关键字的:

\"而且,它被声明为volatile,这意味着如果任何一个线程改变了这个变量的值,这个改变将立即反映在所有其他线程中。\"

这似乎表明,如果一个变量没有被声明为volatile,那么就不会出现\"改变将立即反映在所有其他线程中\"这种情况,或者说,\"对变量的更改只能稍后反映\"。

问题:

(a)这种理解是否正确?

(b) 如果是这样,在什么时候会应用/暴露给其他线程进行更改?

admin 更改状态以发布 2023年5月21日
0
0 Comments

Java中的volatile关键字用于将一个变量/字段标记为存储在主内存中,在更准确的说法是,每次访问变量时,它将从主计算机内存中读取/写入,而不是从/到CPU缓存中读取/写入。\n\n在典型的多线程应用程序中,当启动许多线程时,它们可能会从主内存中复制一个非volatile变量到CPU缓存中,因此每个线程都将拥有自己的变量副本,这主要是为了提高性能。考虑到这一点,JVM没有保证何时将从/到主内存中读取或写入非volatile变量状态。\n\nvolatile关键字保证用此修饰符标记的变量将被写入计算机的主内存。

0