單例模式
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出靖西免費(fèi)做網(wǎng)站回饋大家。
一個(gè)類只有一個(gè)實(shí)例,并且可以全局訪問使用
應(yīng)用場(chǎng)景
如賬戶管理類,數(shù)據(jù)庫(kù)操作類等(某個(gè)對(duì)象頻繁被訪問使用)
常用方式
餓漢式
懶漢式
同步加鎖
DCL雙重加鎖驗(yàn)證
靜態(tài)內(nèi)部類
枚舉單例
餓漢式
加載類的同時(shí)立即進(jìn)行初始化操作,對(duì)資源消耗很大
public class SingleTest { public static final SingleTest singleTest1=new SingleTest(); public SingleTest() { } public static SingleTest getSingleTest1(){ return singleTest1; } }
懶漢式
優(yōu)點(diǎn):需要使用時(shí)候才進(jìn)行初始化加載
缺點(diǎn):線程不安全,在多線程中很容易出現(xiàn)不同步的情況
public class SingleTest1 { private static SingleTest1 instance=null; public SingleTest1() { } public static SingleTest1 getInstance(){ if(instance==null){ instance=new SingleTest1(); } return instance; } }
同步加鎖
優(yōu)點(diǎn):解決線程安全問題
缺點(diǎn):每次實(shí)例需要判斷加鎖狀態(tài),效率低下
public class SingleTest2 { private static SingleTest2 instance=null; public SingleTest2() { } public static synchronized SingleTest2 getInstance(){ if(instance==null){ instance=new SingleTest2(); } return instance; } }
DCL雙重校驗(yàn)
優(yōu)點(diǎn):并發(fā)不高的情況下可以完美運(yùn)行(推薦使用,客戶端幾乎不存在高并發(fā)情況)
缺點(diǎn):JDK1.5以前可能會(huì)出現(xiàn)instance為初始化的問題(現(xiàn)在的Android幾乎都是1.7 1.8了幾乎可以略率此問題)
public class SingleTest4 { private static SingleTest4 instance=null;//靜態(tài)變量 public SingleTest4() { } public static SingleTest4 getInstance(){ if (instance == null) {//第一層校驗(yàn) synchronized (SingleTest4.class) { if (instance == null) {//第二層校驗(yàn) instance = new SingleTest4(); } } } return instance; } }
靜態(tài)內(nèi)部類
優(yōu)點(diǎn):延遲加載,線程安全,內(nèi)存消耗少(推薦使用)
public class SingleTest5 { private SingleTest5() { } public static final SingleTest5 getInstance() { return SingletonHolder.INSTANCE; } //定義的靜態(tài)內(nèi)部類 private static class SingletonHolder { private static final SingleTest5 INSTANCE = new SingleTest5(); //創(chuàng)建實(shí)例的地方 } }
枚舉單例
優(yōu)點(diǎn):線程安全,防反序列化,防反射,寫法簡(jiǎn)單
public enum SingleTest6 { //第一種方式 // INSTANCE; // private CaiPiao instance; // // SingleTest6() { // instance = new CaiPiao(); // } // // public CaiPiao getInstance() { // return instance; // } // // class CaiPiao { // // } //第二種方式 INSTANCE2{ @Override protected void CaiPiao() { System.out.println("彩票"); } }; protected abstract void CaiPiao(); }
github代碼地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。