gpt4 book ai didi

java - volatile 关键字对于同步 java block 有什么重要性?

转载 作者:行者123 更新时间:2023-12-01 23:52:42 24 4
gpt4 key购买 nike

请问谁能告诉我java中的volatile关键字是什么,它的主要功能,如何将它与synchronized block 一起使用,以及如果我们将它从 block 中完全删除会发生什么?

最佳答案

我们先来了解一下什么是java中的 volatile 变量:

Volatile keyword in Java is used as an indicator to Java compiler and Thread that do not cache value of this variable and always read it from main memory

那么从内存中读取变量值有什么好处,请考虑以下示例代码:

public class Singleton{
private static volatile Singleton _instance; //volatile variable

public static Singleton getInstance(){

if(_instance == null){
synchronized(Singleton.class){
if(_instance == null)
_instance = new Singleton();
}

}
return _instance;

}

在上一个示例中:

1)我们只创建一次实例

2)我们在第一个请求到来时延迟创建实例。

如果我们不将 _instance 变量设置为 volatile ,那么正在创建 Singleton 实例的线程将无法与其他线程进行通信,该实例已被创建,直到它脱离 Singleton block ,因此如果线程 A 正在创建 Singleton 实例并且就在创建失去CPU之后,所有其他线程将无法看到_instance的值不为空,并且它们会相信它仍然为空。

结论:

volatile keyword will be more useful. When multiple threads using the same variable, each thread will have its own copy of the local cache for that variable. So, when it’s updating the value, it is actually updated in the local cache not in the main variable memory. The other thread which is using the same variable doesn’t know anything about the values changed by the another thread

关于java - volatile 关键字对于同步 java block 有什么重要性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119587/

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