多執行緒之倒計時器CountDownLatch及原理

2021-09-30 14:06:43 字數 1729 閱讀 6898

這個工具通常用來控制線程等待,它可以讓某乙個執行緒等待直到倒計時結束再開始執行。countdownlatch是

共享模式

的。構造方法:

countdownlatch(int count):count就是計數的次數

主要方法:

void await():讓當前執行緒等待,直到倒計時結束

long getcount():獲取當前剩餘的計數的次數

void countdown():計數減一

下面看乙個例子:

public class countdownlatchdemo implements runnable catch (interruptedexception e)finally 

}public static void main(string args) throws interruptedexception

cdt.await();

system.out.println("計數完畢");

exec.shutdown();}}

執行結果:

sync(int count)
可以看到計數的次數count直接被賦值給了state。

public void await() throws interruptedexception
可以看到是aqs共享模式獲取資源的方法,只不過是可以被中斷的。再看這個方法:

public final void acquiresharedinterruptibly(int arg)

throws interruptedexception

接下來看countdownlatch中對tryacquireshared方法的重寫。

protected int tryacquireshared(int acquires)
doacquiresharedinterruptibly方法就不再重複了,aqs那篇文章有介紹。

總結一下await():

呼叫await的執行緒加入到countdownlatch的資源獲取,不過countdownlatch對嘗試獲取資源的方法進行了重寫,只有當倒計時結束後才能獲取資源,否則在等待佇列中等著。因此上面那個例子的主線程就會等待倒計時結束,才繼續往下執行。

public void countdown()
再看releaseshared方法。

public final boolean releaseshared(int arg) 

return false;

}

看下countdownlatch對tryreleaseshare方法的重寫。

protected boolean tryreleaseshared(int releases) 

}

doreleaseshared()方法就不貼了,aqs那篇也講過,作用也就跟上面注釋的那樣,喚醒後繼排隊執行緒,也就是呼叫await的那個執行緒。

倒計時器 CountDownLatch

countdownlatch是乙個非常實用的多執行緒控制工具類。常用的就下面幾個方法 countdownlatch int count 例項化乙個倒計數器,count指定計數個數 countdown 計數減一 await 等待,當計數減到0時,所有執行緒並行執行countdownlatch在我工作的...

VBA程式設計之放假倒計時器

用excel做乙個倒計時器,可以實時看到離某個時刻還有幾秒,比如說你惦記著的某人的生日,或者你盼望的放假。private sub workbook open docells 2,3 now 填寫系統當前時間 dt1 now 系統當前時間送給變數 dt2 cells 3,3 目標時間送給變數 dd d...

發言倒計時器 單面會議計時器 會議發言倒計時器

單面會議倒計時器 說明 1.單面 控制按鈕700元 2.單面 控制按鈕 搖控800元 3.單面 控制按鈕 搖控 三腳支架1000元 以上 都是不含稅不含運費的 會議計時器功能 可以任意設定發言時長 高99分59秒 設定會議計提醒時間 以分鐘為單位,1 99分鐘 提醒音為滴滴滴的聲音,發言結束音為叮咚...