面试之线程池
1。构造方法
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
2.图示:主要对象任务队列(fifo先进先出),核心线程数,非核心线程数,最大线程数,空闲时间

3.线程池流程

4.饱和策略
handler:饱和策略,大家都很忙,咋办呢,有四种策略
CallerRunsPolicy:只要线程池没关闭,就直接用调用者所在线程来运行任务
AbortPolicy:直接抛出 RejectedExecutionException 异常
DiscardPolicy:悄悄把任务放生,不做了
DiscardOldestPolicy:把队列里待最久的那个任务扔了,然后再调用 execute() 试试看能行不
5.执行提交方式
ExecutorService 提供了两种提交任务的方法:
execute():提交不需要返回值的任务submit():提交需要返回值的任务
6.线程池类型
JDK 为我们内置了五种常见线程池的实现,均可以使用 Executors 工厂类创建,其实底部都是使用
ThreadPoolExecutor这个构造函数的不通的参数模式,
其中比较特殊的是:
newScheduledThreadPool,周期性的线程任务
scheduleAtFixedRate():按某种速率周期执行scheduleWithFixedDelay():在某个延迟后执行
浙公网安备 33010602011771号