面试题 ---- 单例模式(双重锁方式)

单例对象(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

    http://www.cnblogs.com/Scott007/p/3426441.html

posted @ 2013-11-18 19:06  zl_说不得  阅读(766)  评论(0编辑  收藏  举报