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所指定的策略处理任务