中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

自己做網(wǎng)站 做什么好以營銷推廣為主題的方案

自己做網(wǎng)站 做什么好,以營銷推廣為主題的方案,義烏市建設(shè)銀行分行網(wǎng)站,射陽做網(wǎng)站公司單例模式:保證某個類在程序中只存在唯??份實例,而不會創(chuàng)建出多個實例,單例模式的類一般是構(gòu)造器私有,通過一個方法返回唯一實例; 點這里查看線程安全的詳細(xì)講解; 常見的單例模式分為餓漢式和懶漢式 一…

單例模式:保證某個類在程序中只存在唯??份實例,而不會創(chuàng)建出多個實例,單例模式的類一般是構(gòu)造器私有,通過一個方法返回唯一實例;

點這里查看線程安全的詳細(xì)講解;

常見的單例模式分為餓漢式和懶漢式

一、餓漢式

餓漢式會在類加載的時候創(chuàng)建對象并初始化;

public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}

以上是一個餓漢式實現(xiàn)的單例模式的典型代碼;由代碼可以看出, 在類加載的時候?qū)ο笠呀?jīng)創(chuàng)建好了,也就是不管你需不需要使用,都已經(jīng)存在了,由 getInstance 方法返回這個對象,getInstance 方法直接 return,只涉及到讀操作,不涉及寫操作,因此餓漢式是線程安全的;

二、懶漢式

懶漢式在類加載的時候并不會直接創(chuàng)建出實例,而是在第一次使用的時候才會創(chuàng)建;

public class Singleton {private static Singleton instance = null;private Singleton() { }public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

以上代碼是懶漢式實現(xiàn)的單例模式的典型代碼;其中,?剛開始的時候,instance 對象并沒有實例化,在使用 getInstance 方法獲取該對象時,會判斷該對象是否為空,為空才會初始化(也就是第一次使用的時候為空),之后使用就會直接返回該對象;但是 getInstance 方法既存在讀操作,也存在寫操作 instance = new Singleton(); ,那么在多線程的情況下,是否會存在線程安全問題呢?答案是肯定的,試想如果兩個線程同時執(zhí)行到 if 判斷,此時 instance 為空,兩個線程都會進入 if 語句內(nèi),這樣兩個線程就會各自創(chuàng)建兩個對象并返回,這就違背了單例模式的初衷;

那么如何解決這個問題呢?

優(yōu)化一

可以使用 synchronized 加鎖,由于兩個線程不應(yīng)該同時判斷出 instance == null,故可以對整個 if 塊使用 synchronized 進行加鎖;于是代碼就變?yōu)?#xff1a;

public class Singleton {private static Singleton instance = null;private Singleton() { }public static Singleton getInstance() {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}return instance;}
}

這樣一來,在多線程的情況下,當(dāng)一個線程進入到 if 塊內(nèi),其他線程就會阻塞等待,等待出了synchronized 塊之后,instance 實例也就 new 完了,其他線程再進行判斷 instance 就不為 null 了,但是這樣一來,之后的每次調(diào)用 getInstance 方法都會進行加鎖,釋放鎖等操作,這樣系統(tǒng)開銷就非常大,影響效率,而我們只需要在第一次創(chuàng)建實例的時候加鎖,因此即為了保證線程安全,又要保證效率,就得對上述代碼進一步優(yōu)化;

優(yōu)化二

由于我們只需要在第一次創(chuàng)建實例的時候才加鎖,因此可以在 synchronized 外面再包裝一層 if 判斷,于是代碼進一步變?yōu)?#xff1a;

public class Singleton {private static Singleton instance = null;private Singleton() { }public static Singleton getInstance() {if(instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

這樣一來,既保證了線程安全,又不會非常影響效率,但是上述代碼還存在一個問題:指令重排序問題,在 new Singleton() 實例的時候,new 操作可以被拆分為三步:

1)申請內(nèi)存空間;

2)在內(nèi)存空間上構(gòu)造對象;

3)把內(nèi)存地址賦值給實例引用;

編譯器為了執(zhí)行效率,會優(yōu)化這三步的順序,但是 1 肯定是最先執(zhí)行的,因此 new 操作可能的執(zhí)行順序為 1 -> 2 -> 3,1 -> 3 -> 2,當(dāng)執(zhí)行順序為后者的時候,假設(shè)有兩個線程 t1,t2,在 t1 執(zhí)行完 1, 3 還來不及執(zhí)行 2 的時候,此時 t2 線程執(zhí)行到 if 判斷,此時由于 t1 線程執(zhí)行了步驟 3 ,所以 t2 判斷 if 不為 null,就直接返回 instance 對象了,但此時 instance 指向的是一個還沒有初始化的非法對象,因此 t2 線程的后續(xù)代碼訪問 instance 里面的屬性和方法時就會出錯,為了避免這種情況,需要對上述代碼再進行優(yōu)化;

優(yōu)化三

使用 volatile 關(guān)鍵字,告訴編譯器不要優(yōu)化指令重排序;

public class Singleton {private static volatile Singleton instance = null;private Singleton() { }public static Singleton getInstance() {if(instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

至此,線程安全的懶漢式就實現(xiàn)了;

?

http://www.risenshineclean.com/news/50440.html

相關(guān)文章:

  • wordpress 30天唐山seo推廣公司
  • 網(wǎng)站建設(shè)步驟大全石家莊seo推廣
  • 有哪些做網(wǎng)站的品牌天津百度推廣排名優(yōu)化
  • 做網(wǎng)站的費用入賬優(yōu)化公司組織架構(gòu)
  • 申請制作網(wǎng)站seo教程百度網(wǎng)盤
  • 百家號和網(wǎng)站同步做凡科建站客服電話
  • 做設(shè)計找圖有哪些網(wǎng)站有哪些問題能打開各種網(wǎng)站的瀏覽器
  • 做家庭影院的有哪些網(wǎng)站網(wǎng)站優(yōu)化方案范文
  • 銘萬做的網(wǎng)站百度論壇
  • 網(wǎng)站建設(shè)崗位工作范圍網(wǎng)絡(luò)優(yōu)化工程師吃香嗎
  • 做網(wǎng)站銷售東西 需要什么資質(zhì)抖音廣告推廣
  • 武漢建筑工程有限公司搜索引擎seo關(guān)鍵詞優(yōu)化效果
  • 簡單的購物網(wǎng)站源碼百度推廣充值必須5000嗎
  • 做調(diào)查賺錢的網(wǎng)站又哪些品牌傳播方案
  • 福州做網(wǎng)站公司淘寶seo排名優(yōu)化
  • 手機網(wǎng)站如何做營銷b2c有哪些電商平臺
  • 江蘇網(wǎng)站建設(shè)定制新浪微博指數(shù)查詢
  • h5互動的網(wǎng)站百度快照和廣告的區(qū)別
  • 電子軟件開發(fā)工資多少錢成都seo優(yōu)化公司
  • 同城購物網(wǎng)站建設(shè)泰州百度關(guān)鍵詞優(yōu)化
  • 如何查詢網(wǎng)站的備案信息國際實時新聞
  • 創(chuàng)衛(wèi)網(wǎng)站 建設(shè) 方案青島seo經(jīng)理
  • 河北 石家莊 網(wǎng)站建設(shè)青島百度競價
  • 可做外鏈的視頻網(wǎng)站銀川seo
  • vue做的網(wǎng)站多么鄭州網(wǎng)絡(luò)推廣哪個好
  • 菏澤做網(wǎng)站電話關(guān)鍵詞詞庫
  • 手機音樂網(wǎng)站程序源碼百度點擊器找名風(fēng)
  • 網(wǎng)站建設(shè) 工具廈門seo排名優(yōu)化公司
  • 淄博網(wǎng)站建設(shè)公司推薦iis7站長工具
  • 網(wǎng)站域名解析錯誤怎么解決廣告優(yōu)化