天天看點

聊聊并發(三)——同步輔助類

  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

本部落格所有文章僅用于學習、研究和交流目的,版權歸作者所有,歡迎非商業性質轉載。

如果本篇部落格給您帶來幫助,請作者喝杯咖啡吧!點選下面打賞,您的支援是我最大的動力!