妙博客

主机评测 香港服务器 洛杉矶VPS测评

设计模式-JAVA-单例模式(Singleton)

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。


单例模式往往会有线程安全问题,所以一般有以下两种方式


1.静态内部类的方式

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    private Singleton() {
    }
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

利用了 classloader 机制来保证初始化 instance 时只有一个线程访问。因为 SingletonHolder 类没有被主动使用,只有通过显式调用 getInstance 方法时,才会显式装载 SingletonHolder 类,从而实例化 instance。



2.双重检查锁定

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

在这个实现中,我们首先检查 instance 是否为 null,如果是,我们就使用同步块来确保只有一个线程可以访问该块。在同步块内部,我们再次检查 instance 是否为 null,如果是,我们就创建一个新的 Singleton 实例并将其赋值给 instance。最后,我们返回 instance。


这种实现是线程安全的,并且不会影响性能。我们还使用了 volatile 关键字来确保多个线程可以正确地处理 instance 变量。


Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2