多线程并行、所有线程结束后输出任务完成
示例
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();
}
}