java CountDownLatch 等待多線程完成

CountDownLatch容許一個或多個線程等待其餘線程完成操做。java

package com.test;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {
    
    static CountDownLatch c = new CountDownLatch(2);
    
    public static void main(String[] args) throws InterruptedException {
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                System.out.println(1);
                c.countDown();
                System.out.println(2);
                c.countDown();
            }
        }).start();
        c.await();
        System.out.println(3);
    }
}

CountDownLatch的構造函數接收一個int類型的參數做爲計數器,若是你想等待N個點完成,這裏就傳入N。ide

當咱們調用CountDownLatch的countDown方法時。N就是減1,CountDownLatch的await方法會阻塞當前線程,直到N變成零。因爲coundDown方法能夠用在任何地方。因此這裏說的N個點,能夠是N個線程,能夠是1個線程裏的N個執行步驟。用在多個線程時,只須要把這個CoundDownLatch的引用傳遞到線程裏便可。函數

 

注意:計數器必須大於等於0,只是等於0的時候,計數器就是0,調用await方法時不會阻塞當前線程。CountDownLatch不可能從新初始化或者修改對象的內部計數器的值.spa

相關文章
相關標籤/搜索