Executors--线程池三大方法,七大参数,4大拒绝策略
Executors--线程池三大方法,七大参数,4大拒绝策略
七大参数
ExecutorService threadPool = new ThreadPoolExecutor(
2,//默认核心线程数
5,//最大线程数
3,//实际线程量小于默认+阻塞,多久就恢复释放最大线程到默认线程
TimeUnit.SECONDS,//时间单位
new ArrayBlockingQueue<>(3),//阻塞队列
Executors.defaultThreadFactory(),//默认的线程工厂
new ThreadPoolExecutor.AbortPolicy()//拒绝策略
);
四大拒绝策略
new ThreadPoolExecutor.AbortPolicy() //银行满了,还有人进来,不处理这个人,抛出异常
new ThreadPoolExecutor.CallerRunsPolicy()//哪里来的去那里
new ThreadPoolExecutor.DiscardPolicy()//队列满了,丢掉任务,不抛异常
new ThreadPoolExecutor.DiscardOldestPolicy()//队列满了,尝试和第一个竞争,不抛异常
如何定义最大线程
1,CPU密集型: 几核就是几,保持CPU效率最高 Runtime.getRuntime().availableProcessors()
2,IO密集型: 大于你程序中十分耗IO的线程、程序。
package ExecutorsA;
import java.util.concurrent.*;
/**
* Executors 工具三大方法
* 七大参数 ExecutorService threadPool = new ThreadPoolExecutor(
* 2,//默认核心线程数
* 5,//最大线程数
* 3,//实际线程量小于默认+阻塞,多久就恢复释放最大线程到默认线程
* TimeUnit.SECONDS,//时间单位
* new ArrayBlockingQueue<>(3),//阻塞队列
* Executors.defaultThreadFactory(),//默认的线程工厂
* new ThreadPoolExecutor.AbortPolicy()//拒绝策略
* );
* 四大拒绝策略 new ThreadPoolExecutor.AbortPolicy() //银行满了,还有人进来,不处理这个人,抛出异常
* new ThreadPoolExecutor.CallerRunsPolicy()//哪里来的去那里
* new ThreadPoolExecutor.DiscardPolicy()//队列满了,丢掉任务,不抛异常
* new ThreadPoolExecutor.DiscardOldestPolicy()//队列满了,尝试和第一个竞争,不抛异常
* @author liu
*/
public class ThreadPoolA {
public static void main(String[] args) {
//executor三大方法,不常用
//ExecutorService threadPool = Executors.newSingleThreadExecutor();//单个线程
//ExecutorService threadPool = Executors.newFixedThreadPool(5);//创建一个固定大小的线程池
//ExecutorService threadPool = Executors.newCachedThreadPool();//可伸缩的,遇强则强,遇弱则弱
//自定义线程池,常用
ExecutorService threadPool = new ThreadPoolExecutor(
2,
Runtime.getRuntime().availableProcessors(),
3,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy()
);
try {
for (int i = 0; i < 9; i++) {
//使用线程池之后,用线程池来创建线程
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + " OK");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {//线程池用完,程序结束,关闭线程池
threadPool.shutdown();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现