一、线程池引入
Java的线程池是Java5.0以后的新功能,它让开发者更易开发高效的多线程程序,也让多线程程序的性能大大提高。Java提供的关于线程池的API是基于原有线程API的,只是用另外一种方式来使用Java的多线程编程功能。
简单来说,线程池就是一个或者多个线程的集合。一般而言,线程池有一下几个部分。
- 完成任务的一个或者多个线程
- 用于调度管理的管理线程
- 要求执行的任务队列
那么为什么要使用线程池呢?当短时间内需要处理的任务数量很多时,使用线程池的好处体现在两点,
- 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务;
- 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
二、ThreadPoolExecutor
java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类。它的继承关系为主要以下4个ThreadPoolExecutor、AbstractExecutorService、ExecutorService和Executor,
在ThreadPoolExecutor类中提供了四个构造方法:
public class ThreadPoolExecutor extends AbstractExecutorService {
.....
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
BlockingQueue<Runnable> workQueue);
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
BlockingQueue<Runnable> workQueue,ThreadFactory threadFa