当前位置:网站首页>认识ThreadPoolExecutor
认识ThreadPoolExecutor
2022-07-04 23:01:00 【InfoQ】
线程池的创建
- FixedThreadPool:允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。
- SingleThreadPool:和FixedThreadPool会面临同样的问题
- CachedThreadPool :允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。
- ScheduledThreadPool:和CachedThreadPool会面临同样的问题
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.acc = System.getSecurityManager() == null ?
null :
AccessController.getContext();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}
corePoolSize
表示线程池的核心线程数。如果设置为0,则在没有任何任务时会销毁线程池;如果大于0,即使没有任务时也会保证线程池的线程数量等于此值。
maximumPoolSize
表示线程池在任务增多时,可以创建的最大线程数。
keepAliveTime
表示线程的存活时间,当线程池空闲时并且超过了此时间,多余的线程就会销毁,直到线程池中的线程数量销毁的等于 corePoolSize 为止,如果 maximumPoolSize 等于 corePoolSize,那么线程池在空闲的时候也不会销毁任何线程。
unit
表示存活时间的单位
workQueue
表示线程池执行的任务队列,当线程池的所有线程都在处理任务时,如果来了新任务就会缓存到此任务队列中排队等待执行。
threadFactory
表示线程的创建工厂
提交线程任务
- submit()
- execute()
任务拒绝策略
- AbortPolicy,终止策略,线程池会抛出异常并终止执行,它是默认的拒绝策略;
- CallerRunsPolicy,把任务交给当前线程来执行;
- DiscardPolicy,忽略此任务(最新的任务);
- DiscardOldestPolicy,忽略最早的任务(最先加入队列的任务)。
- 自定义拒绝策略
边栏推荐
- ETCD数据库源码分析——处理Entry记录简要流程
- The solution to the lack of pcntl extension under MAMP, fatal error: call to undefined function pcntl_ signal()
- 字体设计符号组合多功能微信小程序源码
- 头文件重复定义问题解决“C1014错误“
- vim编辑器知识总结
- [crawler] jsonpath for data extraction
- [odx Studio Edit pdx] - 0.2 - Comment comparer deux fichiers pdx / odx
- One of the commonly used technical indicators, reading boll Bollinger line indicators
- [graph theory] topological sorting
- 解决无法通过ssh服务远程连接虚拟机
猜你喜欢
Redis introduction complete tutorial: List explanation
A complete tutorial for getting started with redis: Pipeline
SHP data making 3dfiles white film
CTF competition problem solution STM32 reverse introduction
智力考验看成语猜古诗句微信小程序源码
Tweenmax emoticon button JS special effect
小程序vant tab组件解决文字过多显示不全的问题
Qt加法计算器(简单案例)
Explanation of bitwise operators
LabVIEW中比较两个VI
随机推荐
mamp下缺少pcntl扩展的解决办法,Fatal error: Call to undefined function pcntl_signal()
Qt个人学习总结
Network namespace
LIst 相关待整理的知识点
P2181 diagonal and p1030 [noip2001 popularization group] arrange in order
Redis入门完整教程:Pipeline
The difference between debug and release
Set up a website with a sense of ceremony, and post it to 1/2 of the public network through the intranet
图片懒加载的原理
A complete tutorial for getting started with redis: getting to know redis for the first time
实战模拟│JWT 登录认证
C language to quickly solve the reverse linked list
Servlet+jdbc+mysql simple web exercise
QT drawing network topology diagram (connecting database, recursive function, infinite drawing, dragging nodes)
A complete tutorial for getting started with redis: redis shell
Redis introduction complete tutorial: Collection details
Redis getting started complete tutorial: Geo
头文件重复定义问题解决“C1014错误“
MP advanced operation: time operation, SQL, querywapper, lambdaquerywapper (condition constructor) quick filter enumeration class
一次edu证书站的挖掘