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