Java中实现单例模式的方式有以下几种:
- 饿汉式(Eager Initialization):在类加载时就创建单例对象,并通过静态方法返回。此方式在多线程环境下是安全的。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- 懒汉式(Lazy Initialization):在调用获取单例对象的方法时才创建单例对象。此方式在多线程环境下需要进行线程同步处理。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 双重校验锁(Double-Checked Locking):在懒汉式的基础上进行改进,在创建实例时增加了一次判空校验,减少了不必要的同步开销。
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- 静态内部类(Static Inner Class):利用静态内部类的特性,实现懒加载并保证线程安全。
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
- 枚举(Enum):利用枚举的特性,实现单例模式。枚举是线程安全且只会被实例化一次。
public enum Singleton {
INSTANCE;
// 需要添加的单例对象的其他方法
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/832772.html