https://www.cnblogs.com/dafanjoy/p/9729358.html
public static void main(String a[]) {
definedExecutor();
}
public static void definedExecutor() { // 参数 corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue
// corePoolSize = 5 maximumPoolSize = 11 workQueue = 3
Executor executor = new ThreadPoolExecutor(
CorePoolSize(核心线程数量):5, //20个任务 第一 会先创建5个
maxmumPoolSize(允许线程的最大数量):11, //第三 剩余的10个 可以在允许的最大线程数中再创建 6 个,
//因为CorePoolSize中已经创建了5个, 剩下4个会被拒绝,抛出异常
KeepAliveTime(线程所允许的最大空闲时间):60,
TimeUnit.SECONDS, //(维护线程所允许的空闲时间的单位)
new LinkedBlockingQueue<Runnable>(5) // 无界队列,第二 放入5个 到队列中排队
);
executorsTest(executor);
//ExecutorService executorService = Executors.newFixedThreadPool(5);
//executorsTest(executor); 创建固定大小线程池实际也是调用的ThreadPoolExecutor,CorePoolSize,maxmumPoolSize值为参数传递
//无界队列中没有固定的队列数, 所有多出的任务都会放到队列中排队。
//创建一个单线程, 始终只会有一个 实际也是调用的ThreadPoolExecutor,CorePoolSize,maxmumPoolSize值固定是1
//Executor executor = Executors.newSingleThreadExecutor();
//executorsTest(executor);
}
// 模拟15个任务并发执行
private static void executorsTest(Executor executor) {
for (int i = 0; i < 20; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在执行");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
java 线程池理解
最新推荐文章于 2022-11-13 16:22:20 发布