单例模式的懒汉式

Java单例模式实现
  1. public class SingletonD {    
  2.     /**  .
  3.     * 单例对象实例  
  4.      */    
  5.     private static SingletonD instance = new SingletonD();    
  6.     
  7.    public static SingletonD getInstance() {    
  8.        return instance;    
  9.  }  
  10. private void bb(){
  11. }
  12. }   
  13. //在主activity调用的时候,如下即可
  14. SingletonD.getInstance().bb();

单例模式懒汉有不同的实现版本,下面从线程安全性、性能、实现复杂度等方面对常见的三个版本进行对比: ### 普通线程不安全版本 ```java class Singleton{ // 1.构造器私有化 private Singleton(){} // 2.静态实私有化 private static Singleton singleton; // 3.提供实的静态方法 public static Singleton getInstance(){ if (singleton == null){ singleton = new Singleton(); } return singleton; } } ``` - **线程安全性**:该版本不支持多线程,在多线程环境下不能正常工作。多个线程可能同时进入 `if (singleton == null)` 判断,从而创建多个实,违背了单例模式的原则 [^2][^4]。 - **性能**:由于没有加锁,在线程环境下性能较好,因为没有额外的同步开销。 - **实现复杂度**:实现简,代码量少,易于理解。 ### 同步方法版本 ```java public class LazySingleton { private LazySingleton() { } private volatile static LazySingleton instance; public synchronized static LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; } } ``` - **线程安全性**:使用 `synchronized` 关键字修饰 `getInstance` 方法,保证了在多线程环境下只有一个线程能进入该方法,从而确保的唯一性 [^1]。 - **性能**:由于每次调用 `getInstance` 方法都需要进行同步,会带来一定的性能开销,尤其是在高并发场景下,性能影响较为明显。 - **实现复杂度**:在普通版本的基础上增加了 `synchronized` 关键字,实现复杂度略有增加。 ### 双重检查锁定(Double-Checked Locking)版本 ```java public class LazySingleton { private LazySingleton() { } private volatile static LazySingleton instance; public static LazySingleton getInstance() { if (instance == null) { synchronized (LazySingleton.class) { if (instance == null) { instance = new LazySingleton(); } } } return instance; } } ``` - **线程安全性**:通过双重检查和 `synchronized` 块,既保证了在多线程环境下只有一个线程能创建实,又避免了每次调用 `getInstance` 方法都进行同步,解决了线程安全问题 [^5]。 - **性能**:只有在实未创建时才会进行同步,实创建后,后续调用 `getInstance` 方法无需同步,性能得到了优化。 - **实现复杂度**:代码相对复杂,需要理解双重检查和 `volatile` 关键字的作用。 ### 总结 | 版本 | 线程安全性 | 性能 | 实现复杂度 | | --- | --- | --- | --- | | 普通线程不安全版本 | 不安全 | 线程性能好 | 简 | | 同步方法版本 | 安全 | 有同步开销,性能一般 | 较简 | | 双重检查锁定版本 | 安全 | 性能优化 | 复杂 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值