面试题 ---- 单例模式(双重锁方式)
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
(1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
(2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
(3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。
常用的有懒汉式、恶汉式、双重锁模式,通用的是双重锁模式。
1 public class Singleton { 2 private volatile static Singleton uniqueInstance; 3 4 private Singleton(){ 5 6 } 7 8 public static Singleton getInstance(){ 9 if(uniqueInstance == null){ 10 synchronized(Singleton.class){ 11 if(uniqueInstance == null){ 12 uniqueInstance = new Singleton(); 13 } 14 } 15 } 16 return uniqueInstance; 17 } 18 }
synchronized(class)很特别,它会让另一个线程在任何需要获取class做为monitor的地方等待.
如果出现下边情况:
synchronized(class)
synchronized(class)
->如果不同线程监视同一个实例或者不同的实例对象,都会等待.
参考:http://www.cnblogs.com/highriver/archive/2011/12/18/2291965.html