單例模式
單例模式:用來保證一個(gè)對(duì)象只能被創(chuàng)建一次滋觉。
普通版
代碼實(shí)現(xiàn)如下
public class Singleton{
private static Singleton instance;
private Singleton{
}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
同步鎖單例
單例模式如果再多線程中使用,如果實(shí)例為空齐邦,可能存在兩個(gè)線程同時(shí)調(diào)用 getInstance() 方法的情況椎侠。就會(huì)操作對(duì)象不唯一。沒有達(dá)到單例的目的措拇。如要解決這種情況我纪,只需要在方法上 添加 syncchonized 關(guān)鍵字保證線程安全。
public class Singleton{
private static Singleton instance;
private Singleton{
}
public static syncchonized Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
or
public static Singleton getInstance(){
syncchonized(Singleton.class)
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
無鎖的線程安全單例模式
通過在聲明時(shí)直接實(shí)例化靜態(tài)成員的方法來保證只有一個(gè)實(shí)例丐吓。這種方式避免了使用同步鎖機(jī)制和判斷實(shí)例是否被創(chuàng)建的額外檢查浅悉。
private static Singleton instance = new Singleton();
private Singleton{
}
public static Singleton getInstance(){
return instance;
}
}