线程池学习

线程池接收到任务时流程图

线程池的四种拒绝策略:AbortPolicy(默认)、DiscardPolicy、DiscardOldestPolicy、CallerRunsPolicy

 

线程池异常处理的四种方式:

1、任务执行代码中try catch捕获异常;

2、Future对象get方法接收任务执行中抛出的异常;

3、实现接口 AsyncUncaughtExceptionHandler 的 handleUncaughtException 方法;

4、重写 ThreadPoolExecutor 的afterExecute方法

 

线程池的工作队列:

ArrayBLockingQueue:数组实现的有界队列,FIFO排序

LinkedBlockingQueue:基于链表结构的阻塞队列,容量可设置也可不设置,最大为Integer.MAX_VALUE,FIFO排序,吞吐量高于ArrayBlockingQueue

SynchronousQueue:同步阻塞队列,不存储任何任务,每一个插入操作必须要等前一个任务执行完成,否则将一直处于阻塞状态,吞吐量高于LinkedBlockingQueue;newCacheThreadPool使用

DelayedWorkQueue:任务定时周期的延迟执行队列,根据指定的执行时间从小到大排序,否则根据插入的顺序排序

PriorityBlockingQueue:具有优先级顺序的无界阻塞队列

 

线程池类型:

newCachedThreadPool:核心线程数为0,最大线程数为Integer.MAX_VALUE,阻塞队列为SynchronousQueue,非核心线程空闲存活时间为60s;适合执行大量短期的小任务

newFixedThreadPool:核心线程数和最大线程数相同,阻塞任务队列为无边界的LinkedBlockingQueue(队列长度一直增加可能导致OOM),因为队列无边界所以不存在非核心线程,非核心线程最长存活时间为0;适合执行长期的任务,CPU密集型任务

newSingleThreadExecutor:核心线程数为1,最大线程数为1,阻塞队列为LinkedBlockingQueue,非核心线程空闲存活时间为0;适合串行执行任务的场景

newScheduleThreadPool:自定义核心线程数,最大线程数为Integer.MAX_VALUE,非核心线程空闲存活时间为0,阻塞队列DelayedWorkQueue,scheduleAtFixedRate() :按某种速率周期执行,scheduleWithFixedDelay():在某个延迟后执行

 

线程池状态:

RUNNING:接收新任务,处理阻塞队列中的任务

SHUTDOWN:不接收新任务,处理阻塞队列中的任务

STOP:不接收新的业务也不处理阻塞队列中的任务,中断正在执行的任务

TIDYING:所有的任务都已运行中止,记录的任务数为0

TERMINATED:线程池彻底终止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值