饿汉式单例模式、懒汉式单例模式和双检锁单例模式
时间: 2024-08-14 07:02:30 浏览: 59
Java单例模式的全面总结
**饿汉式单例模式**:
这种模式在类加载时就实例化了对象,因此无论何时需要访问该单例,它都已经是存在的。这种方式避免了多次创建的对象,适合于所有情况,但消耗内存较大,如果应用启动初期不需要这个单例,资源浪费会比较明显。
**懒汉式单例模式**:
也称为“延迟加载”模式。只有在第一次请求时才创建单例对象,这种方式可以节省内存开销,但是可能会存在线程安全问题,因为如果多个线程同时进入 Singleton 的构造函数,可能会得到多个实例。常见的解决办法是在构造函数上加上 synchronized 关键字,但这会影响性能。
**双检锁单例模式**:
这是对懒汉式单例的一种改进,添加了双重检查锁定(Double-checked locking),即在第一次检查时如果实例尚未创建,则获取锁并创建;如果已经创建,则直接返回。这种方式解决了线程安全问题,提高了性能,但依然需要注意多线程环境下的初始化顺序问题。
总结:
- 饿汉式:一次性创建,无锁机制,适用于对内存空间有较高要求的场景。
- 懒汉式:按需创建,可能存在线程不安全,需额外考虑同步措施。
- 双检锁:在懒汉式的基础上增强了线程安全,同时尽量降低性能影响。
阅读全文