单例设计模式
Posted yotop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例设计模式相关的知识,希望对你有一定的参考价值。
介绍
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
代码
1、饿汉式单例
2、懒汉式单例
3、加锁(synchronized)单例
4、双重检查锁
5、静态内部类单例
6、枚举类单例
思考题:
1、双重检查锁中为什么要两次判断==null?volatile关键字在此处起了什么作用?
2、静态内部类是通过什么机制保证线程安全性与延迟加载的?
3、如何破坏一个单例?
tips:
1、JVM 创建对象的时候,分为三步 ,如下图
上面3行伪代码中的2和3之间,可能会被重排序,当声明对象的引用为volatile后,之前的3行伪代码中的2和3之间的重排序,在多线程环境中将会被禁止。
2、内部类里创建对象的实例,这样只要我们的应用中不使用这个内部类StaticInnerSingleton,那么jvm虚拟机他就不会去加载这个类,也就不会去创建我们所要创建的单例staticInnerHolderSingleton,这里静态内部类,就完成了懒汉式的延迟加载,同时又保证了线程安全
3、反射攻击、序列化攻击
以上是关于单例设计模式的主要内容,如果未能解决你的问题,请参考以下文章