1. 程式人生 > >筆試Java實現單例設計模式(最優方案)

筆試Java實現單例設計模式(最優方案)

    public class SingletonTest  
    {  
        private SingletonTest()  //建構函式私有化
        {  
        }  

        private static class Inner   //私有的靜態內部類  
        {  
            static SingletonTest singletonTest = new SingletonTest();  
        }  

        public static SingletonTest getInstance()  
        {  
            return
Inner.singletonTest; } }

因為靜態內部類只有在使用的時候才會被Classloader 載入。而JVM 類載入的時候又是執行緒安全的。


其他實現方法:

最常見(懶漢式)【執行緒不安全】:

    public class SingletonTest  
    {  
        private static SingletonTest singletonTest = null;  

        private SingletonTest()  
        {  
        }  

        public
static SingletonTest getInstance() { //在類的靜態方法中例項化單例 if (null == singletonTest) { singletonTest = new SingletonTest(); } return singletonTest; } }



餓漢式

    public class SingletonTest  
    {  
            //在類裡面例項化靜態成員變數  
private static SingletonTest singletonTest = new SingletonTest(); private SingletonTest() { } public static SingletonTest getInstance() { return singletonTest; } }



雙重檢查鎖

public static Singleton getInstance()
{
  if (instance == null)
  {
    synchronized(Singleton.class) {  
      if (instance == null)          
        instance = new Singleton();
    }
  }
  return instance;
}

雙重檢查鎖定背後的理論是完美的。不幸地是,現實完全不同。雙重檢查鎖定的問題是:並不能保證它會在單處理器或多處理器計算機上順利執行。