public class Test {
public static void main(String[] args) {
ExecutorService pool = newFixedThreadPool(5, 5);
for (int i = 0; i < 1000; i++) {
//将 i 转化为 j,这样j 还是final类型的参与线程
final int j = i;
Callable<Integer> callable = () -> {
Thread.sleep(60);
System.err.println("结果:" + j + "---:" + System.currentTimeMillis() + "|****" + Thread.currentThread().getId());
return new Random().nextInt(100);
};
//提交要执行的任务
pool.submit(callable);
}
//启动之前提交的任务,有序的关闭
pool.shutdown();
}
/**
* 创建线程池
*/
private static ExecutorService newFixedThreadPool(int corePoolSize, int maximumPoolSize) {
/**
* corePoolSize - 线程池核心池的大小。
* maximumPoolSize - 线程池的最大线程数。
* keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
* unit - keepAliveTime 的时间单位。
* workQueue - 用来储存等待执行任务的队列。
* threadFactory - 线程工厂。
* handler - 拒绝策略。
*/
return new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(), new ThreadPoolExecutor.DiscardOldestPolicy());
}
}