线程池
不推荐使用 - 数据量巨大
newCacheThreadPool、newFixedThreadPool、newSingleThreadPool
容易发生 OOM,缓存线程池队列有存活时间,但无线程数量限制,容易 cpu100%,其他两个都是无界队列
自定义线程
- 两个优先级
- 提交优先级
- 添加核心线程
- 线程满了放入队列
- 队列放慢后增加到最大线程
- 全满后调用拒绝策略
- 执行优先级
- 优先执行现有任务、最后执行队列任务
- 提交优先级
- submit 和 execute 有什么区别
- submit 调动了 execute 方法,submit 有返回值,execute 没有
- 新增线程时做了什么 addWorker(Runnable firstTask, boolean core) 使用了 goto 语句
- 查看线程池状态
- 判断是否线程是否满了
- 执行任务做了什么 runWorker(Worker w)
- run() 方法是调用方法,start() 是创建线程调用
- 两个优先级
定时线程池
- 三种方法
- schedule() 一次性
- scheduleWithFixedDelay 任务完成时间后 + 延迟时间为一周期
- scheduleAtFiexedRate 是以 period 为间隔来执行任务的,少等超执 周期固定
- 提交优先级为队列第一
- periodic 设置为 1 才判断为周期性任务
- 三种方法