筆試Java實現單例設計模式(最優方案)
阿新 • • 發佈:2018-12-26
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;
}
雙重檢查鎖定背後的理論是完美的。不幸地是,現實完全不同。雙重檢查鎖定的問題是:並不能保證它會在單處理器或多處理器計算機上順利執行。