CountDownLatch 原始碼分析

2022-07-08 20:15:10 字數 904 閱讀 7858

countdownlatch 原始碼分析:

1:countdownlatch資料結構

成員變數 sync型別物件

private final sync sync; sync是繼承aqs的乙個類,countdownlatch是通過aqs和cas來實現它的鎖的功能的;

2構造方法:

public countdownlatch(int count) finally while (pred.waitstatus > 0);

pred.next = node;

} else {

compareandsetwaitstatus(pred, ws, node.signal); //設定waitstatus=-1

return false;

接下來分析下 countdown方法:

public void countdown() {

sync.releaseshared(1);

releaseshared的方法如下:  目的  將aqs中的state -1,當state減到0的時候返回true

public final boolean releaseshared(int arg) {  // arg=1

if (tryreleaseshared(arg)) {

doreleaseshared();   //這段**的作用是unpark 被await 的執行緒;

具體的實現是:呼叫後繼節點的locksupport.unpark(s.thread); 這裡的s節點就是head節點的後繼節點;也就是前面呼叫await被掛起的執行緒節點

return true;

return false;

通過這裡的countdown方法,就和之前的await()方法呼應起來了。實現了,某乙個執行緒等待其他執行緒執行結束後再執行這個執行緒

AQS之countDownLatch原始碼解析

public class countdownlatch int getcount protected int tryacquireshared int acquires protected boolean tryreleaseshared int releases private final syn...

多執行緒 CountDownLatch

countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。應用場景 假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程...

執行緒同步 CountDownLatch

應用場景 有乙個任務想要往下執行,但必須要等到其他的任務執行完畢後才可以繼續往下執行。假如我們這個想要繼續往下執行的任務呼叫乙個countdownlatch物件的await 方法,其他的任務執行完自己的任務後呼叫同乙個countdownlatch物件上的countdown 方法,這個呼叫await ...