重学设计模式 - Double-Checked Locking模式
来源:互联网 发布:mac搜狗输入法快捷键 编辑:程序博客网 时间:2024/06/05 07:38
1、 意图
多线程中,创建线程安全的单件模式。
2、 问题
多线程中,Singleton模式并不总是正常工作的。
3、 解决方案
在检查到null或实例未创建之后进行“同步”,然后再检查一次,确保实例尚未创建
4、 效果
Singleton模式的变体,优化掉不必要的锁定,这种同步检查最多进行一次,因此不会成为瓶颈。
5、 实现
// .Net中通过MemoryBarrier 实现public class MySingleton { private static object myLock = new object(); private static MySingleton mySingleton = null; private static bool ready = false; private MySingleton() { } public static MySingleton GetInstance() { if (!ready) { // 1st check lock (myLock) { if (!ready) { // 2nd (double) check mySingleton = new MySingleton(); System.Threading.Thread.MemoryBarrier(); // fence ready = true; } } } return mySingleton; }}
// 使用C#关键字volatile实现,会降低效率public class MySingleton { private static object myLock = new object(); private static volatile MySingleton mySingleton = null; private MySingleton() { } public static MySingleton GetInstance() { if (mySingleton == null) { // check lock (myLock) { if (mySingleton == null) { // double check, volatile ensures that the value is re-read mySingleton = new MySingleton(); } } } return mySingleton; }}
// .net 4.0中可以使用Lazy<T>实现public class MySingleton{ private static readonly Lazy<MySingleton> mySingleton = new Lazy<MySingleton>(() => new MySingleton()); private MySingleton() { } public static MySingleton GetInstance() { return mySingleton.Value; }}
- 重学设计模式 - Double-Checked Locking模式
- Double Checked Locking 模式
- Double Checked Locking 模式
- Double Checked Locking 模式
- (设计模式)Singleton和Double-Checked Locking模式
- 经典j2ee设计模式Double-Checked Locking失效问题
- ACE中的Double Checked Locking 模式
- Singleton 模式和Double-Checked Locking
- ACE中的Double Checked Locking 模式
- ACE中的Double Checked Locking 模式
- 【转载】ACE中的Double Checked Locking模式
- Java设计模式之单例模式 double---checked----locking双重检查锁定
- java设计模式进阶_double-checked-locking
- Double Checked Locking 模式 -- 单例实现的多线程版本
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- 单例模式如何在多线程环境下保证安全—Double Checked Locking 模式使用
- Singleton 单件模式及其变体 Double-Checked Locking 双重检查锁模式
- double-checked locking
- 一、功能简述 正是微博如火如荼的时节,其中各个微博的分享功能是网站推广产品的好东东啊,此时如何方便快捷的使用微博的分享功能就显得比较重要了。我的站点每篇文章的底部有一些分享的链接: 不过我觉得这些分享
- C#获取本执行程序所在的当前路径的方法
- winform小记
- 程序员歌.事业篇
- How to create (and deploy) a windows service in C# ?
- 重学设计模式 - Double-Checked Locking模式
- CSUOJ 1063 Sequence
- Winsock TCP
- 抽象工厂模式第二步-使用简单工厂模式
- Windows 7 自动进入桌面
- 谈信息时代如何学习
- 职场英语:上司希望你明白的二十四件事
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
- myeclipse 打包Jar