手写一个线程池
package threadPool;
import java.util.concurrent.*;
//创建自定义线程池
public class ThreadPoolDemo {
public static void main(String[] args) {
/*
参数说明(7参数)
corePoolSize:常驻核心线程数
maximumPoolSize:线程池中能够容纳的同时执行的最大线程数,此值必须大于等于1
分为业务情况 CUP密集型:大量计算,没有阻塞 (cup核心数 + 1 ),
IO密集型:大量IO操作,大量阻塞(cup核心数*2 或者 cpu核心数/1-阻塞系数)
keepAliveTime:空闲线程存活时间
unit:存活时间单位
workQueue:任务队列(阻塞队列)
handler:拒绝策略
*/
//显示CPU核心数
//System.out.println("CPU核心数:"+Runtime.getRuntime().availableProcessors());
ExecutorService threadPool = new ThreadPoolExecutor(
0,
5,
1L,
TimeUnit.SECONDS,
new LinkedBlockingDeque<Runnable>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy()
);
//模拟10个用户办理业务,每个用户就是来自外部的请求线程
try {
for (int i = 1; i <= 10; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + "\t办理业务");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
运行情况: