摘要:介紹類位于包下,利用它可以實(shí)現(xiàn)類似計(jì)數(shù)器的功能。是通過一個(gè)計(jì)數(shù)器來實(shí)現(xiàn)的,計(jì)數(shù)器的初始值為線程的數(shù)量。當(dāng)計(jì)數(shù)器值到達(dá)時(shí),它表示所有的線程已經(jīng)完成了任務(wù),然后在閉鎖上等待的線程就可以恢復(fù)執(zhí)行任務(wù)。
CountDownLatch 介紹
CountDownLatch 類位于java.util.concurrent包下,利用它可以實(shí)現(xiàn)類似計(jì)數(shù)器的功能。比如有一個(gè)任務(wù)A,它要等待其他幾個(gè)任務(wù)執(zhí)行完畢之后才能執(zhí)行,此時(shí)就可以利用CountDownLatch來實(shí)現(xiàn)這種功能了。CountDownLatch是通過一個(gè)計(jì)數(shù)器來實(shí)現(xiàn)的,計(jì)數(shù)器的初始值為線程的數(shù)量。每當(dāng)一個(gè)線程完成了自己的任務(wù)后,計(jì)數(shù)器的值就會(huì)減1。當(dāng)計(jì)數(shù)器值到達(dá)0時(shí),它表示所有的線程已經(jīng)完成了任務(wù),然后在閉鎖上等待的線程就可以恢復(fù)執(zhí)行任務(wù)。
定義兩個(gè)線程線程1
public class Thread1 extends Thread { private CountDownLatch countDownLatch; public Thread1(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread-1"); countDownLatch.countDown(); } }
線程2
public class Thread2 extends Thread { private CountDownLatch countDownLatch; public Thread2(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread-2"); countDownLatch.countDown(); } }請(qǐng)求
@RequestMapping("test-countdownlatch") public void testCountDownLatch() { CountDownLatch countDownLatch = new CountDownLatch(2); Thread1 thread1 = new Thread1(countDownLatch); Thread2 thread2 = new Thread2(countDownLatch); thread1.start(); thread2.start(); try { countDownLatch.await(); System.out.println("main..."); } catch (InterruptedException e) { e.printStackTrace(); } }結(jié)果
"main..."總是等待兩個(gè)線程完成后打印
CountDownLatch代碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74711.html
摘要:多線程同步工具箱之篇前言的多線程協(xié)調(diào)工具,,,都是在多線程代碼中使用比較多的工具類之一。毫不夸張的說,這幾個(gè)類,是等同于解決多線程問的包,實(shí)在有必要添加到程序員的工具箱里面。 Java多線程同步工具箱之CountDownLatch篇 前言 Java的多線程協(xié)調(diào)工具CountDownLatch,Semaphore,CyclicBarrier,ReadWriteLock都是在多線程代碼中使...
摘要:今天我們來聊一聊的使用場景。使用場景在某些業(yè)務(wù)情況下,要求我們等某個(gè)條件或者任務(wù)完成后才可以繼續(xù)處理后續(xù)任務(wù)。同時(shí)在線程完成時(shí)也會(huì)觸發(fā)一定事件。方便業(yè)務(wù)繼續(xù)向下執(zhí)行。第個(gè)毒販如果當(dāng)前已經(jīng)沒有可以毒販,立刻返回被干掉了干掉一個(gè)。 作者 : 畢來生微信: 878799579 前言 ? 在 java.util.concurrent 包中提供了多種并發(fā)容器類來改進(jìn)同步容器 的性能。今天...
摘要:所有示例代碼請(qǐng)見下載于基本概念并發(fā)同時(shí)擁有兩個(gè)或者多個(gè)線程,如果程序在單核處理器上運(yùn)行多個(gè)線程將交替地?fù)Q入或者換出內(nèi)存這些線程是同時(shí)存在的,每個(gè)線程都處于執(zhí)行過程中的某個(gè)狀態(tài),如果運(yùn)行在多核處理器上此時(shí),程序中的每個(gè)線程都 所有示例代碼,請(qǐng)見/下載于 https://github.com/Wasabi1234... showImg(https://upload-images.jians...
摘要:線程可以調(diào)用的方法進(jìn)入阻塞,當(dāng)計(jì)數(shù)值降到時(shí),所有之前調(diào)用阻塞的線程都會(huì)釋放。注意的初始計(jì)數(shù)值一旦降到,無法重置。 showImg(https://segmentfault.com/img/remote/1460000016012041); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一、CountDownLatch簡介 CountDow...
摘要:前言之前學(xué)多線程的時(shí)候沒有學(xué)習(xí)線程的同步工具類輔助類。而其它線程完成自己的操作后,調(diào)用使計(jì)數(shù)器減。信號(hào)量控制一組線程同時(shí)執(zhí)行。 前言 之前學(xué)多線程的時(shí)候沒有學(xué)習(xí)線程的同步工具類(輔助類)。ps:當(dāng)時(shí)覺得暫時(shí)用不上,認(rèn)為是挺高深的知識(shí)點(diǎn)就沒去管了.. 在前幾天,朋友發(fā)了一篇比較好的Semaphore文章過來,然后在瀏覽博客的時(shí)候又發(fā)現(xiàn)面試還會(huì)考,那還是挺重要的知識(shí)點(diǎn)。于是花了點(diǎn)時(shí)間去了解...
閱讀 1991·2019-08-30 15:54
閱讀 3541·2019-08-30 15:52
閱讀 1829·2019-08-29 17:20
閱讀 2522·2019-08-29 17:08
閱讀 2352·2019-08-26 13:24
閱讀 794·2019-08-26 11:59
閱讀 2788·2019-08-23 14:50
閱讀 620·2019-08-23 14:20