一、创建一个线程池
![](https://img.haomeiwen.com/i18296654/f11092d0708ac624.png)
corePoolSize:核心线程数——最小空闲线程数(这很重要)
maximumPoolSize:最大线程数——核心线程+非核心线程数了
keepAliveTime:空闲线程等待新线程加入间隔时间
unit:空闲线程等待新线程加入间隔时间单位
workQueue:等待执行的线程队列
threadFactory:用于创建新线程的工厂类,可以用于自定义线程名称
handler:用于执行拒绝策略
二、线程池的基本使用
2.1示例代码
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[]args) {
/**
* 业务需求
* 你在网上同时约了20个女神奔现
* 你忙不过来找了一个兄弟陪你一起
* 约了2个贵宾室2个普通包间(只能在贵宾室或包间内聊天)
* 酒店的大厅有8个座位
* 打算每个女神聊三秒(真男人系列)
* 请开始你的表演
*/
Executor executor = new ThreadPoolExecutor(2, 4, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(8), new ThreadFactory() {
AtomicInteger chatNum = new AtomicInteger(0);
@Override
public ThreadnewThread(Runnable r) {
return new Thread(r, "聊天室" + chatNum.getAndIncrement());
}
}, new RejectedExecutionHandler(){
@Override
public void rejectedExecution(Runnabler, ThreadPoolExecutor executor) {
System.out.println("女神,不好意思,贵宾室和包间都挤满了!!!");
}
});
for (int i = 0; i < 20; i++) {
executor.execute(() -> {
try {
System.out.println("我在" + Thread.currentThread().getName() + "和女神聊3秒钟的天");
Thread.sleep(3000);
} catch(InterruptedException e) {
throw new RuntimeException(e);
}
});
}
}
}
2.2执行结果
![](https://img.haomeiwen.com/i18296654/cc74f7e5abe38fba.png)
2.3执行过程分析图
![](https://img.haomeiwen.com/i18296654/68d0e9acded9d2ec.png)
三、其余四种线程池(不推荐使用)
预知后事如何,请听下回分解
原文链接:https://blog.csdn.net/qq_24679971/article/details/129192470
网友评论