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 已启动并正在运行。 所有应用程序都已启动并正在运行。