1.饿汉式(静态常量)
1)构造器私有化(防止new)
2)类的内部创建对象
3)向外暴露一个静态公共方法(getInstance)
4)代码实现
public class Single {
private Single(){}
private static Single single = new Single();
public static Single getInstance(){
return single;
}
}
缺点:在类装载的时候就实例化了,如果没有用到,就会造成内存浪费
2.饿汉式(静态代码块)
3.懒汉式(线程不安全)
优缺点:
1)启动懒加载的效果,但是只能在单线程下使用。
2)多线程下一个线程进入if判断还没来得及往下执行,另一线程也通过了这个判断,这样就会造成创建多个实例出来。
实际开发中不要使用这种方式
4.懒汉式(线程安全,同步方法)
5.懒汉式(线程安全,同步代码块)
错误写法
因为多线程都进入if内之后一个线程new 完,另一个线程拿到锁也会new。
6.双重检查
推荐使用
使用两次if检查。可以保证线程安全。推荐使用。
7.静态内部类
特点:
1.外部类被装载时,内部静态类不会被装载。
2.当调用内部静态类的getInstance方法时,静态内部类才会被装载,而且装载时线程是安全的。
8.枚举
枚举
1.不仅避免多线程同步,而且还能防止反序列话重写创建。
2.推荐使用