JUC 中提供了三種常用的輔助類,通過這些輔助類可以很好的解決線程數量過多時 Lock 鎖的頻繁操作。這三種輔助類為:
CountDownLatch:減少計數。減一計數器。
CyclicBarrier:循環栅欄。加一計數器。
Semaphore:信号燈。
腦圖:https://www.processon.com/view/link/61849ba4f346fb2ecc4546e5
場景一:6 個同學陸續離開教室後,班長才可以關門。
代碼示例:
場景二:田徑運動會上,起跑前所有運動員等待裁判發槍聲為準開始比賽。典型的多個線程等待一個線程。
場景三:田徑運動會上,終點處,計時裁判需要等待所有運動員到達終點,才能宣布本次比賽結束。典型的一個線程等待多個線程。
每執行 CyclicBarrier 一次障礙數會加一,如果達到了目标障礙數,才會執行目标方法。可以将 CyclicBarrier 了解為加一計數器。
一個計數信号量。在概念上,信号量維持一組許可證。如果有必要,每個acquire()都會阻塞,直到許可證可用,然後才能使用它。每個release()添加許可證,潛在地釋放阻塞擷取方。但是,沒有使用實際的許可證對象。Semaphore隻保留可用數量的計數,并相應地執行。使用 acquire() 方法獲得許可證,release() 方法釋放許可。
了解:就是多個線程一起搶多把鎖。
代碼示例:6輛車搶2個車位
這裡,Semaphore的構造器參數是2,表示有2個許可證。是以,可以同時停下2輛車。結果不難分析。
參考文檔:https://www.matools.com/api/java8
作者:Craftsman-L
出處:https://www.cnblogs.com/originator
本部落格所有文章僅用于學習、研究和交流目的,版權歸作者所有,歡迎非商業性質轉載。
如果本篇部落格給您帶來幫助,請作者喝杯咖啡吧!點選下面打賞,您的支援是我最大的動力!