1.定义
线程池是一种多线程处理形式,处理过程中将任务添加 到队列,然后在创建线程后自动启动这些任务。
2.作用
线程池的作用是限制系统中执行线程的数量。
根据系统的环境情况,可以手动或是自动设置线程数量,达到运行的最佳效果。既不会浪费系统资源,还避免了系统拥挤。用线程池控制线程的数量,其他线程排队等候。一个任务执行完毕,再从队列中取最前面的任务进行执行。若队列中没有等待线程,则线程池资源进行等待
3.使用原因
1>减少创建和销毁线程的次数,每个线程都可以被重复利用,可执行多个任务。
2>可以根据系统的承受力,调整线程池中工作线程的数目,防止因为消耗过多的内存,而挂掉服务器。
4.结构
顶级接口Executor ---->这个接口代表执行者,是典型的命令模式的应用。接口中唯一方法:execute(Runnable)
--------ExecutorService ---->真正线程池接口
我们经常使用的线程池是ThreadPoolExecutor ,
ForkJoinPool是JDK7新增的线程池,解决计算机多核问题,解决并行问题,其他两个解决并发问题
ScheduledThreadPoolExecutor比ExecutorService新增了“延时”和“周期执行”的功能。
5.使用
Executors是线程池的工厂类,提供了一些列静态方法,用于创建各种不同功能的线程池或线程对象。
1>newCachedThreadPool() 具有缓存功能的线程池 ,系统根据需要创建线程,线程被缓存在线程池中。
2>newFixedThreadPool(int nThreads) 固定线程数的线程池
3>newSingleThreadPool() 单线程的线程池
4>newScheduledThreadPool() 指定数目的线程池,可以指定延时后执行任务
5>newSingleThreadScheduledPool() 单线程池,可延时执行
6.状态
RUNNING:能接收新任务。
SHUTDOWN:不接受新任务,但是可以处理已添加的任务。
STOP:不接收新任务,中断正在处理的任务。
TIDYING:当所有任务已终止,线程池会变为此状态。然后执行terminated()
TERMINATED:线程彻底状态。