CountDownLatch
是 Java 并发包 java.util.concurrent
中的一个同步工具类,它允许一个或多个线程等待其他线程完成操作。CountDownLatch
的主要特点是有一个计数器,当计数器的值变为 0 时,所有等待的线程将被唤醒并继续执行。
以下是如何使用 CountDownLatch
的一个简单示例:
import java.util.concurrent.CountDownLatch;
CountDownLatch
实例,并指定计数器的初始值:int numberOfThreads = 5;
CountDownLatch latch = new CountDownLatch(numberOfThreads);
在这个例子中,我们将计数器设置为 5,这意味着我们需要等待 5 个线程完成任务。
countDown()
方法,以减少计数器的值:class MyThread extends Thread {
private CountDownLatch latch;
public MyThread(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
// 执行任务
System.out.println(Thread.currentThread().getName() + " 开始执行任务");
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " 任务执行完毕");
// 任务完成后,减少计数器的值
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
await()
方法,等待计数器的值变为 0:public class Main {
public static void main(String[] args) throws InterruptedException {
int numberOfThreads = 5;
CountDownLatch latch = new CountDownLatch(numberOfThreads);
for (int i = 0; i < numberOfThreads; i++) {
Thread thread = new MyThread(latch);
thread.start();
}
// 等待所有线程完成任务
latch.await();
System.out.println("所有线程任务执行完毕");
}
}
在这个例子中,我们创建了 5 个线程,每个线程执行一个简单的任务。主线程调用 latch.await()
方法等待所有子线程完成任务。当所有子线程完成任务并调用 countDown()
方法后,计数器的值变为 0,主线程继续执行并打印 “所有线程任务执行完毕”。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。