gpt4 book ai didi

java - 关于线程安全设计中使用的逻辑的问题?

转载 作者:行者123 更新时间:2023-12-01 17:43:23 26 4
gpt4 key购买 nike

下面是线程安全设计的代码片段。我们为什么要检查 instance = null在同步块(synchronized block)之前和内部?在外面检查一下还不够吗?

// double locking is used to reduce the overhead of the synchronized method
public static ThreadSafeSingleton getInstanceDoubleLocking() {
if (instance == null) {
synchronized (ThreadSafeSingleton.class) {
if (instance == null) {
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}

最佳答案

它被称为单例模式中的双重检查
假设第一个线程进入方法检查实例是否为空,如果是,它将获取锁并开始创建对象。

假设当第一个线程仍在创建实例(可能是一个重对象)时,同时另一个线程可能进入该方法,它检查实例是否为空,因为第一个线程仍在创建资源并拥有锁,现在第一个线程创建对象并释放锁,第二个线程进入同步块(synchronized block)并检查实例现在是否为空条件失败并从该方法中出来。因此仅存在实例。更多详情

https://www.java67.com/2015/09/thread-safe-singleton-in-java-using-double-checked-locking-pattern.html

关于java - 关于线程安全设计中使用的逻辑的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58231190/

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