【Java 并发编程】CountDownLatch 简介
文章目錄
- I CountDownLatch 概念
- II CountDownLatch 使用流程
- III CountDownLatch API 簡介
I CountDownLatch 概念
1. 概念 : CountDownLatch ( 倒計時鎖 ) 是 Java 并發編程中重要的 線程同步輔助工具類 , 其與 join 方法功能類似 , 其可以阻塞住一個或多個線程 , 等待在某些線程中執行想用的操作 , 將 CountDownLatch 倒計時計數到 0 時 , 這些被阻塞的線程才能繼續向下執行 ;
2. 作用 : CountDownLatch 可以將一個或多個線程阻塞 , 并在另外一個或多個線程中將 CountDownLatch 計數器減為 0 , 被阻塞的線程解除休眠狀態 , 繼續執行 ;
II CountDownLatch 使用流程
1. 初始化 CountDownLatch : 初始化 new CountDownLatch ( 8 ) , 在構造函數中 , 為其指定一個初始值 , 從這個值開始倒計時計數 ; 這里設置了 8 計數 , 可以等待另外 8 個線程執行完畢后 , 在執行后續操作 ;
2. 阻塞 : 在若干線程 ( 一個或多個 ) 中調用同一個 CountDownLatch 對象的 await() 方法 , 即可將這些線程阻塞 ;
3. 計數減一 : 在其它非阻塞的線程中 , 執行操作 , 之后調用 CountDownLatch 對象的 countDown() 方法 , 該計數器的計數會減一 , 如果計數減到 0 , 在線程中的阻塞就會解除 ;
4. 阻塞結束 : 當調用 countDown 計數減到 0 之后 , 線程阻塞解除 , 繼續執行 await() 方法之后的代碼 ;
III CountDownLatch API 簡介
1. 構造方法 : 初始化 CountDownLatch 對象 , 傳入計數器初始計數 count , 其可以表示阻塞 count 個線程 ;
- ① 函數原型 :
- ② 參數 int count : 初始計數 ;
2. 計數器遞減方法 : 每次調用該方法 , CountDownLatch 對象計數器就會減一 , 如果計數器計數減到 0 , 就會解除其對于線程的阻塞 ;
- ① 函數原型 :
- ② 當前計數大于 0 : 計數 - 1 , 如果減一后的計數為 0 , 那么該 CountDownLatch 對象阻塞的線程就會從阻塞處開始執行 ;
- ③ 桑倩計數等于 0 : 如果 CountDownLatch 對象的當前的計數是 0 , 那么不作任何操作 ;
3. 無參阻塞方法 : 在線程 A 中調用該方法后 , 調用該方法的線程 , 線程 A 就會被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒計時為 0 之后該阻塞解除 ;
- ① 函數原型 :
- ② 計數為 0 : 如果當前的 CountDownLatch 計數為 0 , 那么阻塞無效 , 繼續執行之后的代碼 ;
- ③ 計數大于 0 : 此時調用 await 方法 的線程阻塞 , 處于休眠狀態 ;
- ④ 線程非運行狀態 : 如果調用 await 方法的線程處于中斷狀態 , 或者在等待時被中斷 , 拋出 InterruptedException 異常 ;
4. 帶參數的阻塞方法 : 在線程 A 中調用該方法后 , 調用該方法的線程 , 線程 A 就會被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒計時為 0 ( 計數 0 ) 或者超出了等待時間 ( 超時 ) 之后該阻塞解除 ; 該方法運行機制與無參類似 , 這里重點說明超時等待機制 ;
- ① 函數原型 :
- ② 參數 long timeout : 阻塞操作要等待的最長時間 ;
- ③ 參數 TimeUnit unit : 等待時長的單位 , 一般是毫秒 ( ms ) ;
總結
以上是生活随笔為你收集整理的【Java 并发编程】CountDownLatch 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IntelliJ IDEA】创建 导入
- 下一篇: 【Java 并发编程】CountDown