gpt4 book ai didi

java - 如何在 Java 中制作同步单例设计模式?

转载 作者:行者123 更新时间:2023-12-02 07:29:10 26 4
gpt4 key购买 nike

我经历了下面提到的 Java 中的单例设计模式。我无法理解 public static getteraccessor 方法中的 Synchronized 关键字如何防止创建多个对象?如果它被两个不同的类调用两次,Synchronized 应该使它们的调用同步,即一个接一个。它如何只控制一个对象的创建?请详细解释并检查评论我对修饰符的假设是否正确

class MySingleton
{
private static MySingleton singletonObj; //as it is private it cannot be referenced outside of this class
//and as it is static all the instances of this class share the same copy of this refrence variable
private MySingleton()
{
System.out.println("Welcome to a singleton design pattern");
System.out.println("Objects cannot be instantiated outside of this class");
}

public static synchronized MySingleton getASingletonObject()
{
if(singletonObj==null)
{
singletonObj=new MySingleton();
}
return singletonObj;
}


}

非常感谢帮助:)谢谢

最佳答案

你的问题是关于它的工作方式:你有一个实例不是因为同步,而是因为它存储在一个静态变量中,并且只实例化一次(通过延迟创建 - 由 if 检查)。

synchronized 确保只有一个线程会实例化对象,并避免许多线程可能创建重复项的错误。

这是实现它的另一种方法,我发现它更简单,也同样高效:

public class Singleton
private static final Singleton instance=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}

注意:使用这种实现的唯一条件是你的构造函数(新的)不应该抛出任何异常,并且应该只包含简单的代码,比如变量初始化。

关于java - 如何在 Java 中制作同步单例设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054296/

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