大家好,又见面了,我是你们的朋友全栈君。
面试官:线程池有哪些?分别的作用是什么?
常用的线程池有:
newSingleThreadExecutor
newFixedThreadExecutor
newCacheThreadExecutor
newScheduleThreadExecutor
1、newSingleThreadExecutor:
单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务;
2、newFixedThreadExecutor:
固定数量的线程池,每提交一个任务就是一个线程,直到线程达到线程池的最大数量,然后后面进入等待队列直到前面的任务才继续执行;
3、newCacheThreadExecutor:
可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般 是60秒无执行)的线程,当有任务时,会添加新线程来执行;
4、newScheduleThreadExecutor:
大小无限制的 线程池,支持定时和周期性的执行线程。
ThreadPoolExecutor解说:
ThreadPoolExecutor是上面几个线程池底层的实现,封装了一层线程类worker,在运行的时候执行完自己的线程后主动去队列中取下一条线程去执行。
其中完整的构造方法是:
public ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,
TimeUnit unit,
BlockingQueueworkQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize<= 0 ||maximumPoolSize< corePoolSize ||keepAliveTime< 0)throw newIllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw newNullPointerException();this.corePoolSize =corePoolSize;this.maximumPoolSize =maximumPoolSize;this.workQueue =workQueue;this.keepAliveTime =unit.toNanos(keepAliveTime);this.threadFactory =threadFactory;this.handler =handler;
}
corePoolSize:线程池中所保存的线程数,包括空闲线程;
maximumPoolSize:线程池中允许的最大线程数;
keepAliveTime:线程存活时间,当超过keepAliveTime的时候后还无法获取新的任务,则返回null;
unit:keepAliveTime参数的时间单位;
workQueue:执行前用于保持任务的队列,此队列仅保持由execute方法提交的Runnable任务;
threadFactory:执行程序创建新线程时使用的工厂;
handler:由于超出线程范围和队列容量而使用执行被阻塞时所使用的处理策略;
拒绝策略RejectedExecutionHandler有哪些,分别有什么作用:
AbortPolicy:该策略是线程池默认策略;如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。
DiscardPolicy:如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常。
DiscarOldestPolicy:如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。
CallRunsPolicy:如果添加到线程池失败,那么主线程会自己取执行该任务,不会等待线程池的线程取执行。
自定义策略
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143023.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...