多线程并发下的单例模式
2015-01-27 13:18
120 查看
多线程并发下的单例模式
好久没写点东西了,感觉很对不住各位。今天有点心得正好和大家聊聊闲天。是关于单例模式在并发情况下应该怎么写才对,我还是用.net语言来说这些。
首先,我们都知道单例模式,别说你不知道。
代码如下:
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
public Singleton GetInstance()
{ return instance == null ? new Singleton() : instance; }
}
但是这个有问题了,多线程下,怎么能保证从instance == null?到new Singleton() : instance之间没有别的线程在操作呢?现在的代码明显满足不了这个情况,而这在高并发下显然是可以出现的。那就想想办法呗,例如我们使用.net中的lock来做修改。
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
private static object _lock = new object();
public Singleton GetInstance()
{
if (instance == null)
{
lock (_lock)
{
if (instance == null)
{ instance = new Singleton(); }
}
}
return instance;
}
}
这样就可以实现有且仅有一次初始化的机会。
本文出自 “张隽永” 博客,谢绝转载!
好久没写点东西了,感觉很对不住各位。今天有点心得正好和大家聊聊闲天。是关于单例模式在并发情况下应该怎么写才对,我还是用.net语言来说这些。
首先,我们都知道单例模式,别说你不知道。
代码如下:
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
public Singleton GetInstance()
{ return instance == null ? new Singleton() : instance; }
}
但是这个有问题了,多线程下,怎么能保证从instance == null?到new Singleton() : instance之间没有别的线程在操作呢?现在的代码明显满足不了这个情况,而这在高并发下显然是可以出现的。那就想想办法呗,例如我们使用.net中的lock来做修改。
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
private static object _lock = new object();
public Singleton GetInstance()
{
if (instance == null)
{
lock (_lock)
{
if (instance == null)
{ instance = new Singleton(); }
}
}
return instance;
}
}
这样就可以实现有且仅有一次初始化的机会。
本文出自 “张隽永” 博客,谢绝转载!
相关文章推荐
- 高性能高并发服务器架构浅析--多线程模式
- 单例模式在多线程并发情况下的一些思考。
- double check 解决单例模式的多线程并发问题
- 多线程并发下的单例模式
- 你所不知道的单例模式和多线程并发在单例模式中的影响
- ASP.NET 环境下的并发与多线程处理及单件模式、事件重入
- 饿汉式单例模式在多线程中并发访问的解决方案
- JAVA多线程并发下的单例模式应用
- Java多线程之并发协作生产者消费者设计模式
- Java 并发编程 多线程的交互模式
- future相比于其他并发设计模式的优势(“回调驱动(多线程环境下)”、“消息/事件驱动(Actor模型中))
- Java多线程之并发协作生产者消费者设计模式JDK1.5.0+升级优化版
- 你所不知道的单例模式和多线程并发在单例模式中的影响
- 多线程(八)---单例模式并发访问
- 当单例模式遇到多线程并发的时候
- JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
- 基于多线程并发的单例模式
- Java多线程之并发协作生产者消费者设计模式
- Java中的面试题 [3] --- Java高级知识、并发、多线程、JVM调优、分布式、设计模式等
- 你所不知道的单例模式和多线程并发在单例模式中的影响