public class CountDownLatch extends Object
CountDownLatch类是一种同步辅助工具,它允许一个或多个线程等待直到其他线程执行了必需的操作。
CountDownLatch用给定的线程数初始化,该线程数要求在主线程之前完成。
CountDownLatch.await()方法阻止主线程执行,直到当前计数达到零为止。countDown()当线程完成任务时,通过执行线程使用方法来减少计数。一旦计数为0,任何等待呼叫都会立即返回。
以下是CountDownLatch类中可用的重要方法的列表。
序号 | 方法与说明 |
|---|---|
| 1 | void await( ) 导致当前线程等待,直到锁存器递减计数到零为止,除非该线程被中断。 |
| 2 | boolean await(long timeout, TimeUnit unit) 导致当前线程等待,直到锁存器计数到零为止,除非该线程被中断或经过了指定的等待时间。 |
| 3 | void countDown()减少锁存器的计数,如果计数达到零,则释放所有等待线程。 |
| 4 | long getCount()返回当前计数。 |
| 5 | String toString()返回一个标识此锁存器及其状态的字符串。 |
| 6 | remove( )从集合中删除指定的对象。 |
以下是解释CountDownLatch功能的示例-
import java.util.concurrent.CountDownLatch;
public class Tester {
public static void main(String args[]) {
//将计数器设置为2,即两个应用程序
CountDownLatch countDownLatch = new CountDownLatch(4);
Thread app1 = new Thread(new Application("App1", countDownLatch));
Thread app2 = new Thread(new Application("App2", countDownLatch));
Thread app3 = new Thread(new Application("App3", countDownLatch));
Thread app4 = new Thread(new Application("App4", countDownLatch));
//初始化应用程序
app1.start();
app2.start();
app3.start();
app4.start();
try {
//等到countDownLatch减少到0。-
countDownLatch.await();
//当所有应用程序启动时,打印消息
System.out.println("所有应用程序都已启动并正在运行。");
} catch(InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
class Application implements Runnable {
private String name;
private CountDownLatch countDownLatch;
public Application(String name, CountDownLatch countDownLatch) {
this.name = name;
this.countDownLatch = countDownLatch;
}
public void run() {
try {
System.out.println(name + " started. ");
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
System.out.println( name + " 已启动并正在运行。");
//将计数减少1-
countDownLatch.countDown();
}
}这将产生以下结果-
输出结果
App2 started. App3 started. App1 started. App4 started. App1 已启动并正在运行。 App3 已启动并正在运行。 App4 已启动并正在运行。 App2 已启动并正在运行。 所有应用程序都已启动并正在运行。