Java實現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法
本文實例講述了Java實現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法。分享給大家供大家參考,具體如下:
今天有一個需求是:在一個方法中開啟了一個子線程來執(zhí)行操作,返回值依賴于子線程的執(zhí)行結(jié)果,這樣如果要返回正確的值,就需要開啟子線程后
主線程等待子線程,然后子線程執(zhí)行結(jié)束后,主線程再繼續(xù)執(zhí)行。
主線程等待子線程需要用到:CountDownLatch
代碼如下:
import java.util.concurrent.CountDownLatch; public class Counter { public static int count = 0; static CountDownLatch cdl=new CountDownLatch(1000);//這里的數(shù)字,開啟幾個線程就寫幾 public synchronized static void inc() throws InterruptedException{//注意,如果不加上synchronized,由于并發(fā)寫入,結(jié)果會小于1000 Thread.sleep(1); count++; cdl.countDown(); } public static void main(String[] args) throws InterruptedException{ for(int i = 0; i < 1000; i++){ new Thread(new Runnable(){ public void run() { // TODO Auto-generated method stub try { Counter.inc(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ).start(); } cdl.await();//主線程等待子線程執(zhí)行輸出 System.out.println(count); } }
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
java集合_淺談Iterable和Iterator的區(qū)別
下面小編就為大家?guī)硪黄猨ava集合_淺談Iterable和Iterator的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09關(guān)于Spring3 + Mybatis3整合時多數(shù)據(jù)源動態(tài)切換的問題
這篇文章主要介紹了關(guān)于Spring3 + Mybatis3整合時多數(shù)據(jù)源動態(tài)切換的問題,需要的朋友可以參考下2017-04-04httpclient的disableConnectionState方法工作流程
這篇文章主要為大家介紹了httpclient的disableConnectionState方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11SpringBoot+MyBatis+AOP實現(xiàn)讀寫分離的示例代碼
高并發(fā)這個階段,肯定是需要做MySQL讀寫分離的。本文主要介紹了SpringBoot+MyBatis+AOP實現(xiàn)讀寫分離的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11Java RandomAccessFile 指定位置實現(xiàn)文件讀取與寫入
這篇文章主要介紹了Java RandomAccessFile 指定位置實現(xiàn)文件讀取與寫入的相關(guān)資料,需要的朋友可以參考下2017-01-01