线程池介绍:
开辟一片内存空间管理尚未死亡的线程,通过线程池进行线程调度
线程池类型:
固定尺寸的线程池:
固定了线程数量,加入线程数超过最大线程池最大线程数时,进入该线程池需要等待
单任务线程池:
线程池只持有一个线程,后续线程进入线程池需要等待,使用无界队列进行管理
ps:
无界队列:底层采用CAS自选进行队列管理,系统资源耗尽前没有空间上限
可变尺寸连接池:
线程池尺寸不定,没有大小限制
延迟连接池:
可以使线程进行延迟启动或者定期启动
单任务延迟连接池:
单线程延迟启动
自定义线程池:
自定义线程池参数:
corePoolSize - 池中所保存的线程数,包括空闲线程。
maximumPoolSize - 池中允许的最大线程数。
keepAliveTime -当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit -keepAliveTime - 参数的时间单位。
workQueue - 执行前用于保持任务的队列。此队列仅保持由execute方法提交的Runnable任务。
可分为IO密集型和计算密集型:
通过派系公式:
Nthreads=NcpuUcpu(1+w/c)
Ncpu=CPU核心数
Ucpu=cpu使用率,0~1
W/C=等待时间与计算时间的比率
来确定线程池的最大线程数,即:
IO密集型=2Ncpu
计算密集型=Ncpu+1