gpt4 book ai didi

需要 Java Singleton 解释

转载 作者:行者123 更新时间:2023-12-03 23:14:28 25 4
gpt4 key购买 nike

通常我使用第一个实现。几天前我发现了另一个。任何人都可以向我解释这两种实现之间的区别吗?第二种实现是线程安全的吗?在第二个例子中使用内部类有什么好处?

//--1st Impl
public class Singleton{

private static Singleton _INSTANCE;

private Singleton() {}
public static Singleton getInstance(){
if(_INSTANCE == null){
synchronized(Singleton.class){
if(_INSTANCE == null){
_INSTANCE = new Singleton();
}
}
}
return _INSTANCE;
}
}

//--2nd Impl
public class Singleton {
private Singleton() {}

private static class SingletonHolder {
private static final Singleton _INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonHolder._INSTANCE;
}
}

最佳答案

第一个实现使用所谓的“双重检查锁”。这是一件非常糟糕的事情。它看起来是线程安全的,但实际上并非如此。

第二种实现确实是线程安全的。

关于为什么第一个实现被破坏的解释相当复杂,所以我建议您获取 Brian Goetz 的 Java Concurrency in Practice 的副本。详细解释。简短的版本是允许编译器在构造函数完成之前分配 _INSTANCE 变量,这可能导致第二个线程看到部分构造的对象。

关于需要 Java Singleton 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656331/

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