一、单例模式
确保一个类最多只有一个实例,并提供一个全局访问点
二、为什么会需要单例
- 有些对象我们只需要一个:线程池、缓存、硬件设备等
- 如果多个实例会有造成冲突、结果的不一致性等问题
- 是否可以用静态变量方式来实现?
- 或者程序员之间协商个全局变量?
三、单例模式的实现
1 | /** |
四、单例模式的优化
多线程的情况下为保证线程安全,需要对单例模式进行优化处理
优化方式:
- 1.同步(synchronized)getInstance方法
1 | public static synchronized ChocolateFactory getInstance() { |
该方法利用synchronized关键字加了同步锁,但是比较耗资源,每次都得加锁
- 2.“急切”创建实例
1 | public class ChocolateFactory { |
该方法在程序启动的时候就创建了一个对象,就算无调用也创建了,耗内存空间
- 3.双重检查加锁(最优)
1 | public class ChocolateFactory { |
利用volatile关键字和双重验证以及同步锁,即保证了内存的合理分配和原子性,也无需每次都加上同步锁
Java设计模式所有示例代码,持续更新中