Java CountDownLatch用法

CountDownLatch用于阻塞一個(gè)線程,等待其它線程先后到達(dá)某個(gè)條件的時(shí)候,再執(zhí)行這個(gè)線程的后續(xù)操作。

public class CountDownLatchTest {
    public static void main(String[] args) throws InterruptedException {
        new CountDownLatchTest().go();
    }

    private void go() throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(3);
        // 依次創(chuàng)建3個(gè)線程,并啟動(dòng)
        new Thread(new Task(countDownLatch), "Thread1").start();
        Thread.sleep(1000);
        new Thread(new Task(countDownLatch), "Thread2").start();
        Thread.sleep(1000);
        new Thread(new Task(countDownLatch), "Thread3").start();
        countDownLatch.await();
        System.out.println("所有線程已到達(dá),主線程開始執(zhí)行" + System.currentTimeMillis());

    }

    class Task implements Runnable {
        private CountDownLatch countDownLatch;

        public Task(CountDownLatch countDownLatch) {
            this.countDownLatch = countDownLatch;
        }

        @Override
        public void run() {
            System.out.println("線程" + Thread.currentThread().getName() + "已經(jīng)到達(dá)" + System.currentTimeMillis());
            countDownLatch.countDown();
        }
    }
}

運(yùn)行結(jié)果:

線程Thread1已經(jīng)到達(dá)1488870269086
線程Thread2已經(jīng)到達(dá)1488870270091
線程Thread3已經(jīng)到達(dá)1488870271092
所有線程已到達(dá),主線程開始執(zhí)行1488870271093

可見,當(dāng)Thread3到達(dá)以后,被阻塞的主線程立即開始執(zhí)行,時(shí)間戳的微小差異,在于線程的調(diào)度的時(shí)間消耗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容