多线程并发下的单例模式多线程
很久没写点东西了,感受很对不住各位。今天有点心得正好和你们聊聊闲天。是关于单例模式在并发状况下应该怎么写才对,我仍是用.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;
}
}
这样就能够实现有且仅有一次初始化的机会。并发