日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
不使用synchronized和lock,如何實現(xiàn)一個線程安全的單例?(二)

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

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

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

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

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

借助CAS(AtomicReference)實現(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.     } 

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

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

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

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


標題名稱:不使用synchronized和lock,如何實現(xiàn)一個線程安全的單例?(二)
文章起源:http://m.5511xx.com/article/djjecdi.html