Java并发工具库:理解和使用CountDownLatch的实战案例

原创 Love The Way You Lie 2024-12-11 04:36 46阅读 0赞

CountDownLatch是Java并发工具库中的一个类,主要用于协调多个线程的执行顺序。当它的计数器减少到零时,会引发一个SignalEvent事件,所有等待该事件的线程都会被唤醒。

下面是一个使用CountDownLatch的实战案例:

  1. 场景描述:有三个任务需要并发执行,但第一个任务完成后,其他两个任务才能开始。

  2. 代码实现
    ```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);

  1. public void executeTasks() {
  2. new Thread(() -> performFirstTask(firstTaskDone)), "Task 1").start();
  3. firstTaskDone.await(5, TimeUnit.SECONDS)); // 确保任务1完成
  4. new Thread(() -> performSecondTask(secondTaskStart)), "Task 2").start();
  5. }
  6. private void performFirstTask(CountDownLatch done) {
  7. try {
  8. System.out.println("Starting Task 1...");
  9. Thread.sleep(3000); // 模拟耗时操作
  10. System.out.println("Task 1 completed.");
  11. done.countDown(); // 计数器减少,表示任务完成
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. }
  15. }
  16. private void performSecondTask(CountDownLatch start) {
  17. try {
  18. System.out.println("Starting Task 2...");
  19. Thread.sleep(4500); // 模拟耗时操作
  20. System.out.println("Task 2 completed.");
  21. start.countDown(); // 计数器减少,表示任务开始
  22. } catch (InterruptedException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. public static void main(String[] args) {
  27. CountDownLatchDemo demo = new CountDownLatchDemo();
  28. demo.executeTasks();
  29. }

}
```

  1. 运行结果:当你运行这段代码时,你会看到以下输出顺序:
  • “Starting Task 1…”
  • “Task 1 completed.”
  • “CountDownLatch count down: 1 -> 0” (表示任务1完成,开始第二个任务)
  • “Starting Task 2…”
  • “Task 2 completed.”

这就是使用CountDownLatch进行并发控制的实战案例。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,46人围观)

还没有评论,来说两句吧...

相关阅读