线程池的组成
1、线程管理器(ThreadPool)
2、工作线程(PoolWorker)
3、任务接口(Task)
4、任务队列(taskQueue)
初始化参数
corePoolSize:核心线程数
maxmumPoolSize:最大线程数
keepAliveTime和TimeUnit:空闲线程存活时间及单位
workQueue:工作队列,必须是BlockingQueue
常见线程池
newCachedThreadPool():可缓存线程池,当线程池大小超过了处理任务所需的线程,就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
newFixedThreadPool(int nThread):固定数量的线程池,每提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行。
newSingleThreadExecutor():单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务。
newScheduledThreadPool(int corePoolSize):大小无限制的线程池,支持定时和周期性的执行线程
newWorkStealingPool(int parallelism):任务窃取线程池,用的是ForkJoinPool。
线程池的使用场景
1、减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2、可以根据系统的承受能力,调用线程池中的工作线程的数目,防止因为消耗过多的内存,而把服务器整挂机(每个线程需要大约1M内存,线程越多,消耗的内存也就越大,最后死机)。
3、将任务的提交和执行进行解耦合,开发的时候不需要考虑太多线程的代码,只关心业务逻辑。
标签:int,队列,任务,线程,内存,执行 From: https://blog.51cto.com/u_11315052/6846924