import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
// 初始化一个CountDownLatch,设置计数器为2
CountDownLatch latch = new CountDownLatch(2);
// 创建并启动两个线程
Thread thread1 = new Thread(() -> {
System.out.println("线程1正在执行任务...");
// 模拟任务执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1任务执行完毕");
// 线程1任务完成,计数器减1
latch.countDown();
});
Thread thread2 = new Thread(() -> {
System.out.println("线程2正在执行任务...");
// 模拟任务执行
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程2任务执行完毕");
// 线程2任务完成,计数器减1
latch.countDown();
});
// 启动线程
thread1.start();
thread2.start();
// 主线程等待,直到计数器为0
System.out.println("等待所有线程完成任务...");
latch.await(); // 阻塞当前线程,直到latch的计数器为0
System.out.println("所有线程任务完成");
}
}
在这个示例中,我们使用了`CountDownLatch`类来等待两个线程完成任务。我们创建了一个`CountDownLatch`实例,并将计数器初始化为2。然后,我们创建了两个线程,每个线程在执行完任务后都会调用`countDown()`方法来将计数器减1。主线程在调用`latch.await()`后会被阻塞,直到计数器的值变为0,即两个线程都完成了它们的任务。