记多线程安全的单例模式--singleton
又是一个毕业季,校招季,希望过几天的面试笔试,我能过五关斩六将,杀出一条血路,嘿嘿O(∩_∩)O!
少说废话,先写个笔试中常见的考题,单例模式绝对是笔试中的常考题~~~
一般来说,可以这么写(c#)(根本不怎么懂c#...-_-!):
1 public sealed class Singleton 2 { 3 private Singleton() 4 {} 5 private static Singleton instance=null; 6 public static Singleton instance 7 { 8 get { 9 if(instance==null) 10 instance=new Singleton(); 11 return instance; 12 } 13 } 14 }
具体因为啥,别问我,问了我也不告诉你,哈哈,开玩笑,确实比较基础,我都不好意思跟你们讲,上面的这个程序基本上没问题,但不是面试官愿意看到的,
因为不是多线程安全的,如果:两个线程同时运行到if语句处,那么判断后instance为空,两个线程同时创建一个实例,这就不满足单例模式了。
下面是多线程安全的版本
public sealed class Singleton { private Singleton(){} private static object syncObj=new object(); private static Singleton instance=null; public static Singleton Instance { get { if(instance==null) { lock(syncObj) { if(instance==null) instance=new singleton(); } } return instance; }
利用上锁的同步机制,保证同一个时刻只用一个线程可以得到同步锁,另一个线程只用等待,保证了多线程的安全性,而且,程序效率较高。

浙公网安备 33010602011771号