溫馨提示×

android countdownlatch和cyclicbarrier區別

小樊
99
2024-11-22 17:10:51
欄目: 編程語言

CountDownLatch和CyclicBarrier都是Java并發庫中的同步輔助工具,它們都可以用來控制多個線程之間的執行順序,但它們之間存在一些關鍵區別:

  1. CountDownLatch:
  • CountDownLatch是一個同步輔助類,它允許一個或多個線程等待直到一組操作完成。
  • 它的工作原理是:一個計數器,初始值為非零。每當一個操作完成時,計數器減1。當計數器減至0時,所有等待的線程被釋放。
  • CountDownLatch是不可重用的,一旦計數器減至0,它就不能再次使用。
  • CountDownLatch適用于確保某些線程在其他線程完成特定任務之前不會繼續執行的場景。

示例代碼:

CountDownLatch latch = new CountDownLatch(3);
new Thread(() -> {
    // 執行任務
    latch.countDown();
}).start();
new Thread(() -> {
    // 執行任務
    latch.countDown();
}).start();
new Thread(() -> {
    // 執行任務
    latch.countDown();
}).start();
latch.await(); // 等待所有線程完成任務
  1. CyclicBarrier:
  • CyclicBarrier是一個同步輔助類,它允許一組線程相互等待,直到所有線程都準備好繼續執行。
  • 它的工作原理是:一個計數器,初始值為非零。每當一個線程到達屏障點時,計數器減1。當計數器減至0時,所有等待的線程被釋放,并且計數器重置為初始值。
  • CyclicBarrier是可重用的,因為它會在計數器重置后再次投入使用。
  • CyclicBarrier適用于多個線程需要相互等待,直到所有線程都準備好繼續執行的場景。

示例代碼:

CyclicBarrier barrier = new CyclicBarrier(3);
new Thread(() -> {
    // 執行任務
    try {
        barrier.await(); // 等待其他線程
    } catch (InterruptedException | BrokenBarrierException e) {
        e.printStackTrace();
    }
}).start();
new Thread(() -> {
    // 執行任務
    try {
        barrier.await(); // 等待其他線程
    } catch (InterruptedException | BrokenBarrierException e) {
        e.printStackTrace();
    }
}).start();
new Thread(() -> {
    // 執行任務
    try {
        barrier.await(); // 等待其他線程
    } catch (InterruptedException | BrokenBarrierException e) {
        e.printStackTrace();
    }
}).start();

總結:

  • CountDownLatch用于確保某些線程在其他線程完成特定任務之前不會繼續執行,不可重用。
  • CyclicBarrier用于多個線程需要相互等待,直到所有線程都準備好繼續執行,可重用。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女