线程池
线程池是一种池化技术,池化技术的思想主要是为了减少每次获取资源的消耗,线程池避免了避免了频繁创建和销毁线程。
线程池的创建
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, //核心线程数corePoolSize
5, //最大线程数maximumPoolSize
10, //保持存活时间keepAliveTime
TimeUnit.SECONDS, //时间单位
new ArrayBlockQueue<Runable>(6), //任务队列
new ThreadPoolExecutor.AbortPolicy() //饱和策略
);
工作流程
模拟20个无限循环查看线程池的工作流程
1.先判断线程池中的线程是否大于corePoolSize,若是则放入线程池。
2.若线程池中的线程大于corePoolSize,则放入队列中。
3.若队列也满了,再放入线程池中。
4.若线程池满 了,则通过饱和策略进行处理。
队列类型
-
SynchronousQueue同步队列,容量为1
-
LinkedBlockingQueue无界队列
-
ArrayBlockingQueue有界队列
线程池类型
-
newCachedThreadPool可缓存的队列
corePoolSzie=0;maximumPoolSize=Integer.MaxValue; 可以看作线程池无限大。队列采用
SynchronousQueue -
newFixedThreadPool(int nThreads)定长线程池
corePoolSzie=nThreads;maximumPoolSize=nThreads;队列采用
LinkedBlockingQueue -
newSingleThreadExecutor单例线程池
corePoolSzie=1;maximumPoolSize=1;队列采用
LinkedBlockingQueue -
newSheduleThreadPool调度线程池
-
延时执行队列
shedule方法参数
shedule(任务,延长时间,时间单位) -
周期性执行
sheduleAtFixedRate方法参数
sheduleAtFixedRate(任务,延长时间,间隔时间,时间单位)
-