內部類實例化static inner class
/**
* 靜態內部類做單例
*
*/
public class Singletion {
private static class InnerSingletion {
private static Singletion single = new Singletion();
}
public static Singletion getInstance(){
return InnerSingletion.single;
}
}
2次檢查實例化dubble check instance
public class DubbleSingleton {
private static DubbleSingleton ds;
public static DubbleSingleton getDs(){
if(ds == null){
//【等待位置】
synchronized (DubbleSingleton.class) {
if(ds == null){
//初始化有可能耗時比較長,導致N個線程到達【等待位置】,如果這裏不第二次檢查ds,就會生成N個新實例對象。
ds = new DubbleSingleton();
}
}
}
return ds;
}
}