Java线程池

java线程池

1.newFixedThreadPool(int nThreads) 指定工作线程数量的线程池

2.newCacheThreadPool() 处理大量短时间工作任务的线程池   

(1)试图缓存线程并且重用,当没有缓存线程可用的时候,就会创建新的工作线程

(2)如果线程闲置的时候超过阀值,则会被终止并移出缓存

(3)系统长时间闲置的时候,不会消耗资源

3.newSingleThreadExecutor() 创建唯一的工作线程执行任务,如果线程异常结束,会有另一个线程取代他

4.newSingleThreadScheduledExecutor()与newScheduledThreadPool(int corePoolSize) 定时或者周期性的工作调度,两者的区别在于是单一的工作线程还是多个线程

使用线程池的好处: 1降低消耗     2. 提高线程的客观理性

5.ThreadPoolExecutor的构造函数  

corePoolSize 核心数量    

maxmunPoolSize 线程不够的时候能够创建的最大线程数

workWQueue:任务等待队列

keepAliveTime:抢占的顺序不一定,看运气

threadFactory:创建新的线程 

6.新任务新提交executor执行后的判断:
如果运行的线程少于corePoolSize,则创建新的线程来处理任务,即使线程池中的线程是空闲的  

如果线程池中的线程数量大于或者等于corePoolSize,但是小于maximumPoolSize,则只有当workQueue满的时候,回去创建新的线程去处理任务 

如果设置的corePoolSize和maximumPoolSize相同,则创建的线程池的大小是固定的,这个时候,如果有新的任务提交,若workQueue未满,则会先提交到workQueue中,等待空闲的线程去workQueue获取任务并且处理

如果运行的线程数量大于等于maximumPoolSize,如果workQueue已经满了,则会通过handler所指定的策略处理任务

原文地址:https://www.cnblogs.com/yyfyl/p/12956960.html