Java并发编程:CountDownLatch应用示例
CountDownLatch是Java并发工具包中的一个类,主要用于协调多个线程的执行。当一个或多个线程完成它们的任务并通过调用countDown()
方法来减少计数器时,其他等待的线程就会被唤醒。
下面是一个简单的CountDownLatch应用示例:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class CountDownLatchExample {
private final CountDownLatch latch = new CountDownLatch(2);
public void task1() throws InterruptedException {
System.out.println("Task 1 started.");
// 执行一些耗时操作
Thread.sleep(500); // 耐心等待500毫秒
System.out.println("Task 1 finished.");
// 当任务完成后,通过调用countDown()方法减少计数器
latch.countDown();
}
public void task2() throws InterruptedException {
System.out.println("Task 2 started.");
// 在第一个线程完成任务后,开始执行这个任务
latch.await(5, TimeUnit.SECONDS)); // 等待至少5秒,直到countDownLatch的计数变为0
System.out.println("Task 2 finished.");
// 当任务完成后,通过调用countDown()方法减少计数器
latch.countDown();
}
public static void main(String[] args) {
CountDownLatchExample example = new CountDownLatchExample();
Thread task1 = new Thread(example::task1);
Thread task2 = new Thread(example::task2);
task1.start(); // 开始执行任务1
task2.start(); // 同样开始执行任务2
try {
// 等待两个任务都完成
task1.join();
task2.join();
System.out.println("Both tasks finished successfully.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们创建了两个线程task1
和task2
。任务1先执行,完成后调用countDown()
方法。任务2在任务1完成之后开始执行,如果任务1未完成,它会一直等待。
通过这个例子,你可以看到CountDownLatch如何协调多个线程的执行顺序。
还没有评论,来说两句吧...