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("主线程执行完成...") ; }