JAVA主執行緒等待所有子執行緒執行完成後主執行緒再執行
阿新 • • 發佈:2019-01-07
如標題,此功能主要是JDK1.5引入的java.util.concurrent包下的CountDownLatch類,此類據介紹為以執行緒輔助類,通過執行緒計數器來實現一個或多個主執行緒等待其下所有子執行緒執行完後主執行緒再繼續執行的功能。
該類只在構造方法中提供了計數器的初始化,沒有任何其他介面來修改或者設定此數值,而主執行緒與子執行緒之間通過CountDownLatch物件來進行通訊控制併發的執行,子執行緒呼叫countDown()方法來表示一個子執行緒執行完畢,同時主執行緒呼叫await()方法等待所有子執行緒完成
需要注意的是:1.初始化的執行緒計數器一定要和子執行緒呼叫的countDown()方法個數相等,否則主執行緒會一直等待;
2.主執行緒呼叫await()一定要在所有子執行緒start()後立馬執行;
以下是我的例子;
···
package com.xuexin.bizserver.controller; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; /** * Created by zxl on 2016/11/1. */ public class ThreadTest { private static finalCountDownLatch latch=new CountDownLatch(2);//兩個工人的協作 public static void main(String[] args) throws InterruptedException { final List<String> list = new ArrayList<String>(); Thread t1 = new Thread(){ public void run() { list.add("t1"); latch.countDown();} }; Thread t2 = new Thread(){ public void run() { list.add("t2"); latch.countDown(); } }; t1.start(); t2.start(); latch.await(); for (String s : list) { System.out.println("s="+s); } } }
···