av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

不使用synchronized和lock,如何實(shí)現(xiàn)一個(gè)線程安全的單例?(二)

如果不那么吹毛求疵的話,可以使用枚舉、靜態(tài)內(nèi)部類以及餓漢模式來(lái)實(shí)現(xiàn)單例模式。見(jiàn):不使用synchronized和lock,如何實(shí)現(xiàn)一個(gè)線程安全的單例? 但是,上面這幾種方法其實(shí)底層也都用到了synchronized,那么有沒(méi)有什么辦法可以不使用synchronized和lock,如何實(shí)現(xiàn)一個(gè)線程安全的單例?

創(chuàng)新互聯(lián)長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為濟(jì)寧企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站濟(jì)寧網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

答案是有的,那就是CAS。關(guān)于CAS,我博客中專門有一篇文章介紹過(guò)他,很多樂(lè)觀鎖都是基于CAS實(shí)現(xiàn)的。這里簡(jiǎn)單介紹一下,詳細(xì)內(nèi)容見(jiàn) 樂(lè)觀鎖的一種實(shí)現(xiàn)方式——CAS

CAS是項(xiàng)樂(lè)觀鎖技術(shù),當(dāng)多個(gè)線程嘗試使用CAS同時(shí)更新同一個(gè)變量時(shí),只有其中一個(gè)線程能更新變量的值,而其它線程都失敗,失敗的線程并不會(huì)被掛起,而是被告知這次競(jìng)爭(zhēng)中失敗,并可以再次嘗試。

在JDK1.5 中新增java.util.concurrent(J.U.C)就是建立在CAS之上的。相對(duì)于對(duì)于synchronized這種阻塞算法,CAS是非阻塞算法的一種常見(jiàn)實(shí)現(xiàn)。所以J.U.C在性能上有了很大的提升。

借助CAS(AtomicReference)實(shí)現(xiàn)單例模式:

 
 
 
  1. public class Singleton { 
  2.     private static final AtomicReference INSTANCE = new AtomicReference();  
  3.  
  4.     private Singleton() {} 
  5.  
  6.     public static Singleton getInstance() { 
  7.         for (;;) { 
  8.             Singleton singleton = INSTANCE.get(); 
  9.             if (null != singleton) { 
  10.                 return singleton; 
  11.             } 
  12.  
  13.             singleton = new Singleton(); 
  14.             if (INSTANCE.compareAndSet(null, singleton)) { 
  15.                 return singleton; 
  16.             } 
  17.         } 
  18.     } 

代碼比較簡(jiǎn)單,稍微了解一下AtomicReference的原理就可以看得懂。不了解的建議去看下,了解下這些CAS的實(shí)現(xiàn)。

用CAS的好處在于不需要使用傳統(tǒng)的鎖機(jī)制來(lái)保證線程安全,CAS是一種基于忙等待的算法,依賴底層硬件的實(shí)現(xiàn),相對(duì)于鎖它沒(méi)有線程切換和阻塞的額外消耗,可以支持較大的并行度。

CAS的一個(gè)重要缺點(diǎn)在于如果忙等待一直執(zhí)行不成功(一直在死循環(huán)中),會(huì)對(duì)CPU造成較大的執(zhí)行開(kāi)銷。

【本文是專欄作者Hollis的原創(chuàng)文章,作者微信公眾號(hào)Hollis(ID:hollischuang)】


文章標(biāo)題:不使用synchronized和lock,如何實(shí)現(xiàn)一個(gè)線程安全的單例?(二)
URL分享:http://uogjgqi.cn/article/djjecdi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流