Java开发的同窗确定使用过多线程,使用多线程那就确定会用到线程池。并且我的认为线程池也是各大互联网公司在面试的时候必问的一个知识点。所以做为开发人员,必须了解线程池的原理以及具体参数的含义。
首先咱们来了解下线程池的基本原理java
在大体了解了线程池的基本工做原理以后,咱们再细看下线程池核心类ThreadPoolExecutor面试
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { //省略具体的代码内容 }
参数说明多线程
参数 | 说明 |
---|---|
corePoolSize | 核心线程数 |
maximumPoolSize | 最大线程数,通常大于等于核心线程数 |
keepAliveTime | 线程存活时间(针对最大线程数大于核心线程数时,非核心线程) |
unit | 存活时间单位,和线程存活时间配套使用 |
workQueue | 任务队列 |
threadFactory | 建立线程的工程 |
handler | 拒绝策略 |
拒绝策略有如下几种spa
拒绝策略 | 说明 |
---|---|
AbortPolicy | 为java线程池默认的阻塞策略,不执行此任务,并且直接抛出一个运行时异常。 |
DiscardOldestPolicy | 丢弃队列最前面的任务,而后从新尝试执行任务(重复此过程) |
DiscardPolicy | 也是丢弃任务,可是不抛出异常 |
CallerRunsPolicy | 由调度线程处理该任务 |