Java单例模式详解:饿汉式、懒汉式与枚举式
版权申诉
5星 · 超过95%的资源 177 浏览量
更新于2024-09-11
收藏 108KB PDF 举报
本文主要探讨了Java中实现单例模式的三种常见方法:饿汉式、懒汉式和枚举式。这些模式是设计模式中经典的部分,对于理解和创建高效、线程安全的单例实例具有重要意义。
**1. 饿汉式(Eager Singleton)**
饿汉式单例模式在类加载时就预先创建了单例对象,确保无论何时请求,都能立即得到一个已存在的实例。这种方式线程安全,因为对象在类加载时就创建了,无需同步。但缺点是如果应用程序在启动时不需要这个单例,可能会造成资源浪费。以下是饿汉式的一个例子:
```java
public class SingletonHanger {
private static final SingletonHanger instance = new SingletonHanger();
// 构造函数私有化,防止外部实例化
private SingletonHanger() {}
public static SingletonHanger getInstance() {
return instance;
}
}
```
**2. 懒汉式(Lazy Singleton)**
懒汉式是在真正需要单例时才创建对象,这样可以避免早期加载可能导致的资源消耗。有两种常见的实现方式:无锁懒汉式和双重检查锁定懒汉式。无锁懒汉式不安全,因为它可能在多线程环境下创建多个实例。而双重检查锁定(DCL)确保了线程安全,但有特定的JVM底层限制。这里以双重检查锁定为例:
```java
public class SingletonLazy {
private volatile static SingletonLazy instance;
private SingletonLazy() {}
public static SingletonLazy getInstance() {
if (instance == null) {
synchronized (SingletonLazy.class) {
if (instance == null) {
instance = new SingletonLazy();
}
}
}
return instance;
}
}
```
**3. 枚举单例(Enum Singleton)**
枚举单例是Java提供的内置方式,既简单又保证线程安全,且调用效率高。每个枚举都有一个独一无二的实例,且不能被实例化。这是唯一一种可以在编译时保证只有一个实例的单例模式:
```java
public enum SingletonByEnum {
INSTANCE;
// 枚举成员方法,提供公共接口
public void doSomething() {
// ...
}
}
```
总结来说,选择哪种单例模式取决于应用场景和需求。饿汉式适合对资源占用敏感且无需延迟加载的情况;懒汉式适用于延迟加载或资源成本较高的场景,需要注意线程安全;而枚举单例则提供了一种简洁且高效的方式,尤其适用于那些只希望有一个实例并且没有额外复杂性的场景。在实际开发中,根据项目需求权衡各种模式的利弊是至关重要的。
2020-08-29 上传
2023-04-29 上传
2023-05-31 上传
2023-04-01 上传
2023-09-24 上传
2023-03-28 上传
2024-06-20 上传
weixin_38616435
- 粉丝: 1
- 资源: 908
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展