gpt4 book ai didi

java - Java中 volatile 的准确含义和作用?

转载 作者:行者123 更新时间:2023-12-02 03:46:39 27 4
gpt4 key购买 nike

Why does BufferedInputStream copy a field to a local variable rather than use the field directly中的问题启发的问题.

其中一个答案是这样描述“ volatile ”关键字的:

“此外,它被声明为 volatile 的,这意味着如果任何线程更改了该变量的值,则此更改将立即反射(reflect)在所有其他线程中。”

这似乎表明,如果一个变量NOT声明为 volatile 的,那么“更改将立即反射(reflect)在所有其他线程中”,或者IOW,“对变量只会在稍后反射(reflect)”。

问题:

(a) 这种理解正确吗?(b) 如果是这样,那么什么时候发生变化然后应用/暴露给其他线程?

最佳答案

Java volatile 关键字用于标记变量/字段存储在主存中,更准确地说,每次访问该变量时,都会将其读/写到主存中计算机内存而不是来自/到 CPU 缓存。

在典型的多线程应用程序中,当许多线程启动时,它们可能会从主内存复制一个非 volatile 变量到CPU缓存,因此每个线程都会有自己的自己的变量副本,这主要是出于性能原因。鉴于此,无法保证 JVM 何时会从主内存读回或写回非 volatile 变量状态。

volatile 关键字保证用此修饰符标记的变量将被写入计算机主内存。

关于java - Java中 volatile 的准确含义和作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com