JUC學習之CountDownLatch 閉鎖

2021-08-18 22:19:06 字數 1403 閱讀 4165

1.什麼是countdownlatch ?

乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或者多個執行緒一直等待,在jdk1.5之後提供

2.什麼是閉鎖?    

在完成某些運算時,只有其他多有執行緒的運算全部完成,當前運算才繼續執行

上**

public class testcountdownlatch 

long end = system.currenttimemillis();

system.out.println("time:"+(end-start));

}}class latchdemo implements runnable

@override

public void run() }}

}

執行結果(太長就擷取了一部分):

可以看出,控制台並沒有輸出「time:***」這句話,但是能說明這句**沒有被執行嗎,不可以。這句**是已經別執行了的,但是當前檔案中存在了主線程和其他的10個執行緒,在多個執行緒同時執行的情況下,並不能計算出乙個時間來。

現在我們希望,主線程等待10個分執行緒執行完畢之後再執行,這時候我們就要用到閉鎖了,

countdownlatch 在底層主要的工作是維護乙個變數,即countdownlatch countdownlatch = new countdownlatch(5),中的5,每當乙個執行緒執行完畢之後,這個變數就會遞減1,直到這個變數的值變成0了,

並且每次要對這個值進行遞減1的操作

public class testcountdownlatch 

try catch (interruptedexception e)

long end = system.currenttimemillis();

system.out.println("time:"+(end-start));

}}class latchdemo implements runnable

@override

public void run()

}}finally }}

}

執行結果:

可以看到「time:xx」被列印了

那麼閉鎖在實際情況中有什麼應用呢?

比如商品的庫存,對於同一件商品有不同的規格,我們需要在每種規格的庫存都計算完畢之後才能計算改該商品的總庫存

JUC學習之CountDownLatch入門

官網的介紹如下 countdownlatch 允許乙個或多個執行緒等待直到在其他執行緒中執行的一組操作完成的同步輔助。countdownlatch用給定的計數初始化。await方法阻塞,直到由於countdown 方法的呼叫而導致當前計數達到零,之後所有等待執行緒被釋放,並且任何後續的await 呼...

JUC學習之執行緒8鎖

介紹執行緒8鎖圍繞乙個題目展開,題目 列印的是 one 還是 two 1.兩個普通同步方法,兩個執行緒,列印?public class testthread8monitor start new thread new runnable start class number public synchro...

JUC之讀寫鎖

是什麼?讀寫分離的鎖。locks包下的 lock condition readwritelock 裡面的readwritelock 讀寫鎖 維護了一對讀寫操作。讀的鎖可以共享 又叫共享鎖 寫的鎖獨佔 又叫獨佔鎖 即寫操作只能開始寫 寫結束,中間不能插入任何寫的操作。怎麼用?如果沒有鎖的情況 publ...