单例模式
定义
保证一个类只有一个实例, 并且提供一个访问它的全局访问点。
好处
- 对于频繁使用而且不需要记录某些状态的对象,可以省略创建对象所花费的时间,这对于这些重量级对象而言,这是非常客观的一笔系统开销。
- 由于new的次数减少,因为对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC的停顿时间。
为什么不设置为静态变量
因为我们要保证资源的可用性,静态变量在程序加载了类的字节码之后,不需要创建任何实例对象就会被分配相应的空间,静态变量就可以被使用了。
如果对象一直没有被使用,这么对资源也会是一种消耗,此时我们就需要在使用时才创建对象,避免不必要的资源浪费。
单例模式的实现
两种构建方式:
- 饿汉模式:指全局的单例实例在类装载时构建。
- 懒汉模式:指全局的单例实例在第一次被使用时构建。
共同点:
- 统一的private级别的构造函数
- instance 成员变量和 uniqueInstance 方法必须是 static 的
饿汉模式(线程安全)
1 | public class Singleton { |
懒汉模式(双重检查加锁版本)
1 | public class Singleton { |