CountDownLatch(线程计数器)
生活随笔
收集整理的這篇文章主要介紹了
CountDownLatch(线程计数器)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
CountDownLatch(線程計數(shù)器)
CountDownLatch 類位于 java.util.concurrent 包下,利用它可以實現(xiàn)類似計數(shù)器的功能。比如有一個任務(wù) A,它要等待其他 4 個任務(wù)執(zhí)行完畢之后才能執(zhí)行,此時就可以利用 CountDownLatch來實現(xiàn)這種功能了。
特點
- countDownLatch這個類使一個線程等待其他線程各自執(zhí)行完畢后再執(zhí)行。
- 是通過一個計數(shù)器來實現(xiàn)的,計數(shù)器的初始值是線程的數(shù)量。每當(dāng)一個線程執(zhí)行完畢后,計數(shù)器的值就-1,當(dāng)計數(shù)器的值為0時,表示所有線程都執(zhí)行完畢,然后在閉鎖上等待的線程就可以恢復(fù)工作了。
主要方法
//阻塞并等待計算歸零 public void await(); //阻塞一段時間,并等待計算歸零,如果超時就停止阻塞 public boolean await(long timeout, TimeUnit unit); //計數(shù)-1 public void countDown();示例
public static void main(String[] args) {CountDownLatch countDownLatch = new CountDownLatch(2);new Thread(()->{try {System.out.println(Thread.currentThread().getName()+"---runing");Thread.sleep(1000);System.out.println(Thread.currentThread().getName()+"---finish");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}},"A").start();new Thread(()->{try {System.out.println(Thread.currentThread().getName()+"---runing");Thread.sleep(1000);System.out.println(Thread.currentThread().getName()+"---finish");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}},"B").start();System.out.println("主線程等待子線程執(zhí)行完畢");try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("子線程執(zhí)行完畢");}總結(jié)
以上是生活随笔為你收集整理的CountDownLatch(线程计数器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 儿童刷牙的方法
- 下一篇: 最长回文串--动态规划