1、ThreadPoolExecutor构造参数的详解
corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。
intmaximumPoolSize, // 线程数的上限
keepAliveTime, TimeUnit unit, // 超过corePoolSize的线程的idle时长, // 超过这个时间,多余的线程会被回收。
BlockingQueue workQueue, // 任务的排队队列 ,线程数持续增长会引发OOM。
ThreadFactory threadFactory, // 新线程的产生方式 为线程做标记更好查找线程
RejectedExecutionHandler handler) // 拒绝策略 当线程池队列满时候触发
AbortPolicy 抛出异常(默认策略)、DiscardPolicy抛弃、DiscardOldestPolicy抛弃队首、
CallerRunsPolicy主线程自己执行。
2、submit与execute的区别
submit是一个带返回值的方式。返回Future对象,其中主要有三种方式
![](https://img.haomeiwen.com/i13405998/8f6d834310898293.png)
![](https://img.haomeiwen.com/i13405998/19af39a43e3cd438.png)
![](https://img.haomeiwen.com/i13405998/687709d48d999384.png)
对比源码发现 Runnable 本质上是被转化为一个Callable对象提交.
![](https://img.haomeiwen.com/i13405998/f783476340512dd8.png)
execute.(Runnable command):只接收runable对象。
注意:
submit提交会把线程的返回值与异常封装到Fututre对象中,运行时不会抛出异常。
execute会抛出异常。
网友评论