java单例模式
双检锁/双重校验锁(DCL,即 double-checked locking)
这种方式是懒汉式加载,采用双锁机制,安全且在多线程情况下能保持高性能。
public class Singleton {
// 关闭无参构造访问
private Singleton() {
}
// 要加上volatile防止指令重排序
private static volatile Singleton singleton;
public static Singleton getInstance() {
// 这个if判断是为了效率考虑,如果每次过来都加锁,就会效率很低
if (singleton == null) {
// 锁加在这里而不是外面,为了性能考虑
synchronized (Singleton.class) {
// 再次检查,防止多线程同时执行到锁跟前
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
静态内部类
这种也是懒汉式,因为静态内部类不会立即被加载,在调用的时候才加载
public class Singleton {
// 关闭无参构造访问
private Singleton() {
}
public static Singleton getInstance(){
return Inner.singleton;
}
private static class Inner{
private static Singleton singleton =new Singleton();
}
}
枚举类
天生的单例模式
public enum EnumTest {
A();
}
你要是觉得写的还不错,就点个关注,可以评论区留下足迹,以后方便查看.
你要是觉得写的很辣鸡,评论区欢迎来对线!
欢迎转载!