java 单例模式
饿汉式单例模式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// 私有构造方法,防止外部创建实例
}
public static Singleton getInstance() {
return instance;
}
// 其他业务方法
}
在这个实现方式中,单例实例在类加载的时候就会被创建,因为实例是私有的静态成员变量,并且在类内部创建,所以是线程安全的。
懒汉式单例模式
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造方法,防止外部创建实例
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// 其他业务方法
}
在这个实现方式中,单例实例在第一次调用getInstance()
方法时才会被创建。通过synchronized
关键字可以确保在多线程环境下的线程安全,但每次调用getInstance()
方法都需要进行同步,可能会影响性能。
双重检查锁单例模式
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;
}
// 其他业务方法
}
在这个实现方式中,通过双重检查锁的方式来确保只有在实例为null时才进行同步创建实例。使用volatile
关键字可以防止指令重排序,确保实例的初始化不会出现问题。
这些是Java中常见的单例模式实现方式。根据具体需求和场景,选择适合的单例模式实现方法。希望对您有所帮助!
参与讨论
(Participate in the discussion)
参与讨论