线程池的优点:
线程复用,控制最大的并发数,方便管理线程
避免频繁创建的开销
提高响应速度
线程池的三大实现方法:
newSingleThreadExecutor(),创建单个线程的线程池
newFixedThreadPool(int nThreads),创建固定大小的线程池
newCacheThreadPool,创建大小可变的线程池
线程池的七大参数:
查看底层代码,发现上述三种方法的本质都是new ThreadPoolExecutor()
这个方法里有七个参数,分别是:
corePoolSize:核心线程数
maximumPoolSize:最大线程数
keepAliveTime:空闲存活时间
unit:超时单位
workQueue:阻塞队列 (single、fixed默认LinkedBlockingQueue,Cache默认为SynchronousQueue)
threadFactory:线程工厂(默认为defaultThreadFactory)
handler:拒绝策略(默认为AbortPolicy)
线程池的四个拒绝策略
AbortPolicy 直接抛出异常
DiscardPolicy:不抛异常,直接丢任务
DiscardOldestPolist:不抛异常,尝试和最先开始的线程争抢资源,失败则丢失
CallerRunsPolicy:交由main线程处理
最大线程数怎么设置?
CPU密集型:根据本机的内核数来定,大于等于
IO密集型:根据程序中大型Io耗时线程,保持大于等于