单例模式

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.推荐使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容