双重检查加锁机制
2011-12-29 15:23
190 查看
先举典型的例子,单例模式。
View Code
那么我们就结合实际的情况来分析一下二者的区别,为了说明方便,以上两种情况分别简称为 “双重检查锁”和“单重检查锁”。
1、第一次访问Instance,同时来了10个线程。对于双重检查锁,instance为null,10个线程在这里lock处排队;对于单重检查锁,10个线程在lock处排队。二者是相同的。
2、第二次、第三次。。。访问Instance,同时来了10个线程。对于双重检查锁,instance不为null,10个线程不用排队,直接返回instance;对于单重检查锁,10个线程,还必须要在lock处排队。
双重检查锁的优点体现出来了:避免了不必要的排队现象。也就是说,双重检查锁的第一重检查,是很必要的,它来保证不必要的排队。
举个例子说明,病人到医院看病,第一次去的时候,都要排队去办病历本。以后再去的时候,如果有病历本,就不用再排队去办了。
View Code
public sealed class Singleton { private Singleton(){} private static Singleton instance = null; private static object syncRoot = new object(); 6 public static Singleton Instance { get { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } return instance; } } }
那么我们就结合实际的情况来分析一下二者的区别,为了说明方便,以上两种情况分别简称为 “双重检查锁”和“单重检查锁”。
1、第一次访问Instance,同时来了10个线程。对于双重检查锁,instance为null,10个线程在这里lock处排队;对于单重检查锁,10个线程在lock处排队。二者是相同的。
2、第二次、第三次。。。访问Instance,同时来了10个线程。对于双重检查锁,instance不为null,10个线程不用排队,直接返回instance;对于单重检查锁,10个线程,还必须要在lock处排队。
双重检查锁的优点体现出来了:避免了不必要的排队现象。也就是说,双重检查锁的第一重检查,是很必要的,它来保证不必要的排队。
举个例子说明,病人到医院看病,第一次去的时候,都要排队去办病历本。以后再去的时候,如果有病历本,就不用再排队去办了。
相关文章推荐
- 单例模式中用volatile和synchronized来满足双重检查锁机制
- 单例模式中用volatile和synchronized来满足双重检查锁机制
- 双重检查加锁机制
- 单例模式中用volatile和synchronized来满足双重检查锁机制
- 双重检查机制被破解的声明
- 双重检查锁机制
- 双重检查加锁机制--解决线程安全
- 利用双重检查加锁机制实现线程安全的单例模式
- 双重检查加锁,实现单例模式
- 有关“双重检查锁定失效”的说明
- Hibernate——脏检查和缓存清理机制
- Spring容器拆分、自动装配和依赖检查机制,基于注解的sessionFactory
- 双重检查锁定原理详解
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- JAVA 单例双重检查(double check)为什么不好用
- Java单例模式双重检查
- 深刻理解双重检查锁定(double-checked locking)与单例模式
- 负载均衡原理与实践详解 第六篇 健康检查机制详解
- 解析 Linux 内核可装载模块的版本检查机制
- 单例-双重检查锁定与延迟初始化