日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Condition总结-CountDownLatch

發(fā)布時(shí)間:2024/4/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Condition总结-CountDownLatch 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。