Java中的CountDownLatch
类声明
public class CountDownLatch extends Object
CountDownLatch类是一种同步辅助工具,它允许一个或多个线程等待直到其他线程执行了必需的操作。
CountDownLatch用给定的线程数初始化,该线程数要求在主线程之前完成。
CountDownLatch.await()方法阻止主线程执行,直到当前计数达到零为止。countDown()当线程完成任务时,通过执行线程使用方法来减少计数。一旦计数为0,任何等待呼叫都会立即返回。
CountDownLatch方法
以下是CountDownLatch类中可用的重要方法的列表。
await()导致当前线程等待,直到锁存器递减计数到零为止,除非该线程被中断。await(longtimeout,TimeUnitunit)导致当前线程等待,直到锁存器计数到零为止,除非该线程被中断或经过了指定的等待时间。countDown()减少锁存器的计数,如果计数达到零,则释放所有等待线程。getCount()返回当前计数。toString()返回一个标识此锁存器及其状态的字符串。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 已启动并正在运行。 所有应用程序都已启动并正在运行。
热门推荐
10 祝女儿简短祝福语大全
11 大学新年祝福语简短创意
12 元旦适合的祝福语简短
13 朋友出远门祝福语简短
14 初六简短的祝福语
15 祝男孩生日祝福语简短
16 同事调离的祝福语简短
17 拜年红包的祝福语简短
18 妈妈生日祝福语简短励志