创建一个线程池
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize: 最小线程数
maximumPoolSize:最大先线程数
keepAliveTime,unit:空闲超时策略
workQueue:排队队列
threadFactory:自定义创建线程策略
handler:自定义拒绝策略,通过handler指定的策略自定义拒绝方案,目前支持
CallerRunsPolicy
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
注意事项
强烈建议使用有界队列:无界队列容易导致oom,而oom会导致所有的请求不可用。使用executor创建线程池,会导致oom问题,因为很多队列都使用
甚用默认拒绝策略:默认拒绝会抛出运行异常,运行异常在编译阶段不会强制catch。这样会导致线程停止,但是最重要的是没有任何通知,这样会导致开发者以为任务正常执行。处理这类问题,最稳妥的还是try catch捕获异常。