寫(xiě)一個(gè)簡(jiǎn)單的單例模式
public class Singleton{
private Singleton(){
...
}
private static Singleton instance=new Singleton();
public static Singleton getInstance(){
return instance;
}
}
- 此種方法余赢,簡(jiǎn)單沒(méi)有任何修飾宿稀,但是單例是static修改的也就是說(shuō)寥裂,類(lèi)加載時(shí)候就會(huì)創(chuàng)建嵌洼,當(dāng)私有構(gòu)造里面耗時(shí)較長(zhǎng)的時(shí)候,類(lèi)初始化會(huì)變得很慢,切每次調(diào)用getInstance方式都會(huì)初始化一次封恰,所以會(huì)很費(fèi)時(shí)麻养,但是非大型項(xiàng)目,對(duì)程序要求高的項(xiàng)目中诺舔,也是可以使用的鳖昌。筆者在工作初期,經(jīng)常使用這種方式
懶加載單例
public class LazySingleton{
private LazySingleton(){
...
}
private static LazySingleton instance=null;
public static synchronized LazySingleton getInstance(){
if(instance==null){
instance=new LazySingleton();
}
return instance;
}
}
- 此方法雖然也有可能在私有構(gòu)造中加載耗時(shí)操作低飒,但是在類(lèi)初始化時(shí)候并未創(chuàng)建许昨,而是在調(diào)用getInstance時(shí)候才會(huì)創(chuàng)建,切只會(huì)創(chuàng)建一次褥赊,但是要用關(guān)鍵字修改糕档,防止線(xiàn)程一正創(chuàng)建時(shí)候,線(xiàn)程二判斷為null拌喉,又創(chuàng)建速那。但是明顯當(dāng)看到synchronized關(guān)鍵字,它在多線(xiàn)程時(shí)候的效率就不會(huì)高了尿背,此方法筆者不經(jīng)常使用端仰。
重頭戲優(yōu)化的單例
/**
* Created by mac on 2017/6/3.
* 單例模式:
* 此種方法好處,
* 靜態(tài)內(nèi)部類(lèi)并不會(huì)直接加載残家,當(dāng)調(diào)用instance方法時(shí)候才會(huì)加載
*
* 使用同步關(guān)鍵字修飾的會(huì)降低速度
*/
public class StaticSingleton {
private StaticSingleton(){
}
private static class SingletonHolder{
private static StaticSingleton instance=new StaticSingleton();
}
public static StaticSingleton getInstance(){
return SingletonHolder.instance;
}
}
- 當(dāng)StaticSingleton被加載時(shí)候榆俺,內(nèi)部類(lèi)并不會(huì)加載,當(dāng)調(diào)用getInstance方法時(shí)候坞淮,才會(huì)初始化茴晋,由于實(shí)例是在類(lèi)加載完成是建立,所以天生對(duì)線(xiàn)程友好回窘。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者