當前位置:編程學習大全網 - 源碼下載 - countdownlatch 用在什麽場景

countdownlatch 用在什麽場景

CountDownLatch

1、類介紹

壹個同步輔助類,在完成壹組正在其他線程中執行的操作之前,它允許壹個或多個線程壹直等待。用給定的計數 初始化 CountDownLatch。由於調用了 countDown() 方法,所以在當前計數到達零之前,await 方法會壹直受阻塞。之後,會釋放所有等待的線程,await 的所有後續調用都將立即返回。這種現象只出現壹次——計數無法被重置。?壹個線程(或者多個), 等待另外N個線程完成某個事情之後才能執行

2、使用場景

在壹些應用場合中,需要等待某個條件達到要求後才能做後面的事情;同時當線程都完成後也會觸發事件,以便進行後面的操作。 這個時候就可以使用CountDownLatch。CountDownLatch最重要的方法是countDown()和await(),前者主要是倒數壹次,後者是等待倒數到0,如果沒有到達0,就只有阻塞等待了。

3、方法說明

countDown

public void countDown()

遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程。如果當前計數大於零,則將計數減少。如果新的計數為零,出於線程調度目的,將重新啟用所有的等待線程。

如果當前計數等於零,則不發生任何操作。

await

public boolean await(long?timeout,

TimeUnit?unit)

?throws InterruptedException

使當前線程在鎖存器倒計數至零之前壹直等待,除非線程被中斷或超出了指定的等待時間。如果當前計數為零,則此方法立刻返回?true?值。

如果當前計數大於零,則出於線程調度目的,將禁用當前線程,且在發生以下三種情況之壹前,該線程將壹直處於休眠狀態:

如果計數到達零,則該方法返回?true?值。

如果當前線程:

則拋出?InterruptedException,並且清除當前線程的已中斷狀態。如果超出了指定的等待時間,則返回值為?false。如果該時間小於等於零,則此方法根本不會等待。

在進入此方法時已經設置了該線程的中斷狀態;或者

在等待時被中斷,

由於調用?countDown()?方法,計數到達零;或者

其他某個線程中斷當前線程;或者

已超出指定的等待時間。

參數:

timeout?- 要等待的最長時間

unit?-?timeout?參數的時間單位。

返回:

如果計數到達零,則返回?true;如果在計數到達零之前超過了等待時間,則返回?false

拋出:

InterruptedException?- 如果當前線程在等待時被中斷

具體實例如下:

  • 上一篇:深圳有哪些公司是做智能手表設計的?
  • 下一篇:md5的解密方法?
  • copyright 2024編程學習大全網