多线程并行、所有线程结束后输出任务完成
示例
package com.fd;import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;public class Test3 {public static void main(String[] args) throws InterruptedException {AtomicInteger counter = new AtomicInteger(0);for (int i = 0; i < 20; i++) {final int index = i;ThreadPoolUtil. execute(() -> { System.out.println("任务 " + index + " 执行者: " + Thread.currentThread().getName());try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (counter){counter.addAndGet(1);System.out.println("当前为: "+counter.get());}});}ThreadPoolUtil. shutdown();ThreadPoolUtil.threadPool. awaitTermination(1, TimeUnit.MINUTES);System.out.println("所有任务完成" + counter.get());}
}
工具类
package com.fd;
import java.util.concurrent.*;public class ThreadPoolUtil {private static final int CORE_POOL_SIZE = 4;private static final int MAX_POOL_SIZE = 10;private static final int QUEUE_CAPACITY = 100;private static final Long KEEP_ALIVE_TIME = 1L;public static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE,MAX_POOL_SIZE,KEEP_ALIVE_TIME,TimeUnit.SECONDS,new LinkedBlockingQueue<>(QUEUE_CAPACITY),new ThreadPoolExecutor.CallerRunsPolicy());public static void execute(Runnable task) {threadPool.execute(task);}public static void shutdown() {threadPool.shutdown();}}