2.1 CountDownLatch工具類的理解,使用

 CountDownLatch快速理解:線程需要等待其他線程做完一些事之後,才能夠繼續執行

圖解:線程a和b執行了await()方法,只有等到Thread1、thread2、thread3執行,知道countdown()讓cnt變爲0之後,線程a和b纔開始執行

(第一次用word畫這種圖,好醜)

原理:後面學習了AQS會進行補充

示例代碼

public class MyCountDownLatch {
    static CountDownLatch latch = new CountDownLatch(4);

    public static void main(String[] args) throws InterruptedException {
        System.out.println("主線程開始執行");
        for (int i = 0; i < 4; i++) {
            new Thread() {
                @Override
                public void run() {
                    try {
                        //確保latch.await();先執行
                        Thread.sleep(100);
                        System.out.println(Thread.currentThread().getName() + ":countdown執行一次");
                        latch.countDown();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }

        new Thread(() -> {
            try {
                System.out.println(Thread.currentThread().getName() + ":開始執行,我要等待countdown");
                latch.await();
                System.out.println("await完畢,開始執行本線程");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();


        latch.await();
        System.out.println("主線程執行完畢");
    }
}

執行結果:

主線程開始執行
Thread-4:開始執行,我要等待countdown
Thread-2:countdown執行一次
Thread-3:countdown執行一次
Thread-0:countdown執行一次
Thread-1:countdown執行一次
主線程執行完畢
await完畢,開始執行本線程

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章