小笔记-线程池
线程池: 是什么:存放worker的地方 能干什么:线程复用;控制最大并发数;管理线程。 怎么玩:
- 七大参数自己定义线程池才是正宗玩法
Executor:
是什么:有缺点的线程实现类
缺点:队列长度为Integer.MAX_VALUE
或者最大线程数为无限大 => OOM
有什么:
- Executors.newFixedThreadPool(int)
- Executors.newSingleThreadExecutor()
- Executors.newCachedThreadPool()
七大参数:
- corePoolSize:线程池中的常驻核心线程数
- maximumPoolSize:线程池中能够容纳同时 执行的最大线程数,此值必须大于等于1
- keepAliveTime:多余的空闲线程的存活时间当前池中线程数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁直到只剩下corePoolSize个线程为止
- unit:keepAliveTime的单位
- workQueue:任务队列,被提交但尚未被执行的任务
- threadFactory:表示生成线程池中工作线程的线程工厂, 用于创建线程,一般默认的即可
- handler:拒绝策略,表示当队列满了,并且工作线程大于 等于线程池的最大线程数(maximumPoolSize)时如何来拒绝 请求执行的runnable的策略
拒绝策略:
- AbortPolicy
- CallerRunsPolicy
- DiscardPolicy
- DiscardOldestPolicy