单例模式的实现大概有5中方式:
1、饿汉式
2、懒汉式
3、双重检测锁
4、静态内部类
5、枚举
这里我写出了三种自己比较常用的用法:
饿汉式的写法如下,饿汉式是在类初始化的时就加载了,是线程安全的,调用效率也很高,但是缺点是不能延时加载,不能做到要用的时候才创建。
public class SingletonDemo1 {
private static SingletonDemo1 instance = new SingletonDemo1();
private SingletonDemo1() {
}
public static SingletonDemo1 getInstance() {
return instance;
}
}
懒汉式写法如下,懒汉式做到了延时加载,也是线程安全的,但是每次调用的时候都要同步执行,在高并发的时候效率低下。
public class SingletonDemo2 {
private static SingletonDemo2 instance;
private SingletonDemo2() {
}
public synchronized static SingletonDemo2 getInstance() {
if (instance == null) {
instance = new SingletonDemo2();
}
return instance;
}
}
public class SingletonDemo3 {
public static class SingletonInstance {
private static final SingletonDemo3 INSTANCE = new SingletonDemo3();
}
public static SingletonDemo3 getInstance() {
return SingletonInstance.INSTANCE;
}
private SingletonDemo3() {
}
}