三种线程池实现方式
1.newCachedThreadPool
-
三种线程池中最快的
-
SynchronousQueue 同步队列
-
CorePoolSize 0
-
KeepAliveTime 60L
-
MaximumPoolSize 最大线程池线程个数 max
-
执行run方法的速度大于提交任务的速度就会出现线程复用
-
高并发下线程无限多 会造成CPU使用率百分百 影响程序流畅度
2.newFixedThreadPool
- 三种线程池中速度中等
- CorePoolSize n 核心线程n个
- MaximumPoolSize n 最大线程池线程个数n
- KeepAliveTime 0
- LinkedBlockingQueue 工作队列无限大
- 工作队列无限大 如果等待的任务足够多 会出现oom 内存溢出
3.newSingleThreadPool
- 单线程线程池
- CorePoolSize 1
- MaximumPoolSize 1
- LinkedBlockingQueue
- KeepAliveTime 0
4.自定义线程
- 自定义CorePoolSize MaximumPoolSize
- 队列类型
- 核心线程数CorePoolSize
- 非核心线程数 MaximumPoolSize - CorePoolSize
- ArrayBlockingQueue
- 当核心线程 非核心线程 以及队列全部爆满之后 下一个任务就会被拒绝
- 提交优先级 和 执行优先级
- 提交优先级由大到小 核心线程 > 队列 > 非核心线程
- 执行优先级由大到小 核心线程 > 非核心线程 > 队列