/*懶漢模式 *優點:延遲載入 * 缺點:不加同步的懶漢模式是線程不安全的,加了synchronzide之後就變成線程安全的了 */public class Singleton { private static Singleton singleton=null; private Singleton( ...
/*懶漢模式
*優點:延遲載入
* 缺點:不加同步的懶漢模式是線程不安全的,加了synchronzide之後就變成線程安全的了
*/
public class Singleton {
private static Singleton singleton=null;
private Singleton(){
}
public static synchronized Singleton getSingleton() {
if (singleton==null){
singleton =new Singleton();
}
return singleton;
}
}
/*
* 餓漢模式
* 優點:線程安全
* 缺點:浪費記憶體空間
* */
import java.util.Set;
public class Singleton {
private static final Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
/*
* 雙重檢查加鎖模式
* 特點:優化性能又保證線程安全
* */
public class Singleton {
private volatile static Singleton singleton; //使用volatile 1.保證了不同線程對這個變數進行操作時的可見性,即一個線程修改了某個變數的值,這新值對其他線程來說是立即可見的。 2.禁止進行指令重排序
private Singleton(){
}
public static Singleton getSingleton(){
if(singleton==null){ //synchronzied消耗性能,提前判斷不必每次都進鎖,提高性能
synchronized (Singleton.class){
if(singleton==null){
singleton=new Singleton();
}
}
}
return singleton;
}
}