文章目录
7个参数
最重要的三个参数
- maximumPoolSize 最大线程数
- corePoolSize 核心线程数
- workQueue 工作队列
其他常见参数
- keepAliveTime 非核心线程结束任务后的存活时间
- unit 时间单位
- threadFactory
- handler 饱和策略
创建方式
Executor【阿里巴巴开发手册强制不允许次方法创建线程】
- newCachedThreadPool(),允许创建大量的线程,导致OOM
- newFixedThreadPool(),运行的请求队列长度为Integer.Max_Value,从而导致OOM
- newScheduledThreadPool(),允许创建大量的线程,导致OOM
- newSingleThreadPool(),运行的请求队列长度为Integer.Max_Value,从而导致OOM
缺点:不够灵活,可能会OOM。
ThreadPoolExecutor【阿里巴巴建议创建线程方法】
ThreadPoolExecutor(x,x,x,x,x,x,x)
饱和策略 handler
1.AbortPolicy 抛弃异常,拒绝新任务
2.CallerRunsPolicy 调用当前执行的线程执行任务
3. DiscardPolicy 不处理,直接丢弃
4. DiscardOlddestPolicy 丢弃最早未处理的任务
线程池excute方法
Runnable接口和Callable接口的区别
Runnable先有,Callable后有,引入目的是未来处理Runnable不支持的用例
- 返回结果
- 抛出异常
execute方法和submit方法的区别
- execute方法 适用于提交不需要返回值的任务,所以无法判断任务是否执行成功
- submit方法适用于需要返回值的任务
- 会返回一个Future对象,通过这个对象判断是否执行成功。
- 通过Future对象的get方法,但是会阻塞当前线程知道任务执行成功为止 - 也可以直接使用get(long timeout, TimeUnit unit)方法,会阻塞一段时间后立即返回,这个时候可能任务没有执行完成