Java并发工具库:理解和使用CountDownLatch的实战案例
CountDownLatch
是Java并发工具库中的一个类,主要用于协调多个线程的执行顺序。当它的计数器减少到零时,会引发一个SignalEvent
事件,所有等待该事件的线程都会被唤醒。
下面是一个使用CountDownLatch
的实战案例:
场景描述:有三个任务需要并发执行,但第一个任务完成后,其他两个任务才能开始。
代码实现:
```java
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class CountDownLatchDemo {
private final CountDownLatch firstTaskDone = new CountDownLatch(1);
private final CountDownLatch secondTaskStart = new CountDownLatch(1);
public void executeTasks() {
new Thread(() -> performFirstTask(firstTaskDone)), "Task 1").start();
firstTaskDone.await(5, TimeUnit.SECONDS)); // 确保任务1完成
new Thread(() -> performSecondTask(secondTaskStart)), "Task 2").start();
}
private void performFirstTask(CountDownLatch done) {
try {
System.out.println("Starting Task 1...");
Thread.sleep(3000); // 模拟耗时操作
System.out.println("Task 1 completed.");
done.countDown(); // 计数器减少,表示任务完成
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void performSecondTask(CountDownLatch start) {
try {
System.out.println("Starting Task 2...");
Thread.sleep(4500); // 模拟耗时操作
System.out.println("Task 2 completed.");
start.countDown(); // 计数器减少,表示任务开始
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CountDownLatchDemo demo = new CountDownLatchDemo();
demo.executeTasks();
}
}
```
- 运行结果:当你运行这段代码时,你会看到以下输出顺序:
- “Starting Task 1…”
- “Task 1 completed.”
- “CountDownLatch count down: 1 -> 0” (表示任务1完成,开始第二个任务)
- “Starting Task 2…”
- “Task 2 completed.”
这就是使用CountDownLatch
进行并发控制的实战案例。
还没有评论,来说两句吧...