Condition总结-CountDownLatch
countdownlatch是一個(gè)同步工具類,它允許一個(gè)或多個(gè)線程一直等待,直到其他線程的操作執(zhí)行完畢再執(zhí)行。從命名可以解讀到countdown是倒數(shù)的意思,類似于我們倒計(jì)時(shí)的概念
countdownlatch提供了兩個(gè)方法,一個(gè)是countDown,一個(gè)是await,?countdownlatch初始化的時(shí)候需要傳入一個(gè)整數(shù),在這個(gè)整數(shù)倒數(shù)到0之前,調(diào)用了await方法的程序都必須要等待,然后通過countDown來倒數(shù)。
使用案例
public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch=new CountDownLatch(3); new Thread(()->{ System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行中"); countDownLatch.countDown(); System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行完畢"); },"t1").start(); new Thread(()->{ System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行中"); countDownLatch.countDown(); System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行完畢"); },"t2").start(); new Thread(()->{ System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行中"); countDownLatch.countDown();System.out.println(""+Thread.currentThread().getName()+"-執(zhí)行完畢"); },"t3").start(); countDownLatch.await(); System.out.println("所有線程執(zhí)行完畢"); }從代碼的實(shí)現(xiàn)來看,有點(diǎn)類似join的功能,但是比join更加靈活。CountDownLatch構(gòu)造函數(shù)會(huì)接收一個(gè)int類型的參數(shù)作為計(jì)數(shù)器的初始值,當(dāng)調(diào)用CountDownLatch的countDown方法時(shí),這個(gè)計(jì)數(shù)器就會(huì)減一。
通過await方法去阻塞去阻塞主流程
模擬高并發(fā)場(chǎng)景
static CountDownLatch countDownLatch=new CountDownLatch(1); @Override public void run() { try { countDownLatch.await(); //TODO } catch (InterruptedException e){ e.printStackTrace(); } System.out.println("ThreadName:"+Thread.currentThread().getName()); } public static void main(String[] args) throws InterruptedException { for(int i=0;i<1000;i++){ new Demo().start(); } countDownLatch.countDown(); }總的來說,凡事涉及到需要指定某個(gè)人物在執(zhí)行之前,要等到前置人物執(zhí)行完畢之后才執(zhí)行的場(chǎng)景,都可以使用CountDownLatch
?
總結(jié)
以上是生活随笔為你收集整理的Condition总结-CountDownLatch的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Condition总结-await和si
- 下一篇: Condition总结-CountDow