JAVA中主线程等待异步子线程全部执行完后在执行方法(线程池实现方法)
1、通过
ExecutorService executor = Executors.newCachedThreadPool(); 创建执行线程池;
2、构造 Worker 类去实现
Runnable接口,并在构造器中追加线程计数器
CountDownLatch成员属性;
public class Worker implements Runnable{
private CountDownLatch downLatch;
private String name;
public Worker(CountDownLatch downLatch, String name){
this.downLatch = downLatch;
this.name = name;
}
public void run() {
//线程执行体
this.doRun();
//当子线程执行完成后,计数器减一;
this.downLatch.countDown();
}
private void doRun(){
System.out.println("子线程"+this.name+"程执行完成...") ;
}
}
3、使用方法;
public static void main(String[] args) {
//演示
ExecutorService executor = Executors.newCachedThreadPool();
//创建计数器对象,此处构造器传入的int类型实参,必须与下文需要的创建的子线程个数相同。
CountDownLatch latch = new CountDownLatch(3);
Worker w1 = new Worker(latch,"T1");
Worker w2 = new Worker(latch,"T2");
Worker w3 = new Worker(latch,"T3");
executor.execute(w3);
executor.execute(w2);
executor.execute(w1);
executor.shutdown();
System.out.println("主线程执行完成...") ;
}