更多多线程相关知识点详见个人主页【多线程相关】专栏
线程池
7个参数
- corePoolSize
- 核心线程数,线程池中始终存活的线程数,即使它们是空闲的
- maximumPoolSize
- 最大线程数,线程池中允许的最大线程数
- keepAliveTime
- 当线程数大于核心线程数时,空闲线程在等待新任务到达的最大时间
- unit
- keepAliveTime的时间单位,可以是天、小时、分钟、秒等
- workQueue
- 一个阻塞队列,用来存储线程池等待执行的任务
- threadFactory
- 线程工厂,主要用来创建线程,默认为正常优先级、非守护线程
- handler
- 拒绝策略,当任务过多(处理不过来)时提供的策略
分配线程的顺序
- 首先使用核心线程来执行任务
- 如果核心线程都忙,且任务队列未满,任务会被放入任务队列中
- 如果核心线程都忙,且任务队列已满,且线程数小于最大线程数,线程池会创建非核心线程来处理任务
- 如果核心线程都忙,且任务队列已满,如果线程数已经达到最大线程数,线程池会采取拒绝策略来处理新提交的任务
4种拒绝策略
- AbortPolicy:丢弃任务,并抛出
RejectedExecutionException异常 - CallerRunsPolicy:由调用线程(提交任务的线程)来处理该任务
- DiscardPolicy:直接丢弃无法处理的任务,不进行任何特殊处理
- DiscardOldestPolicy:丢弃队列中等待最久的任务,然后尝试再次提交当前任务
170万+

被折叠的 条评论
为什么被折叠?



