java单例模式

public class Singleton { // 懒汉式单例  
      
        private static volatile  Singleton singleton = null;  
      
        private Singleton() {  
        }  
      
        public static Singleton getInstance() {  
            if (singleton == null) {  
                synchronized (Singleton.class) {  
                                if(singleton == null) {  
                    singleton = new Singleton();  
                                 }  
                }  
            }  
            return singleton;  
        }  
    } 
  

在getInstance方法里加synchronized, 不太好, 因为在多线程中,如果每次都要去判断线程中时候时候有实例,很耗性能,这里只要在开始判断即可,如有有了实例就无需进入同步中...



这种方法在Java5之前是hold不住的,请参考 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
当然Java5之后就没问题了


http://www.iteye.com/topic/60179  单例模式讨论...

你可能感兴趣的:(Singleton)