一、主要参数说明缓存
corepoolsize核心线程数、maxpoolsize最大线程数、keepalivetime闲置线程收回时间设置、workQueue工做队列(SynchronousQueue、LinkedBlockingQueue、ArrayListBlockingQueue)、unit设置keepalivetime是以秒、分钟为单位、threadFactory建立线程工厂、allowcore。函数
二、执行顺序线程
若是工做队列选择的是LinkedBlockingQueue,线程池中的线程数达到corepoolsize核心线程数后,会将任务放入到队列中,若是队列满了,会继续建立线程,达到maxpoolsize最大线程数后,能够选择几种策略处理,抛异常拒绝新任务、丢弃新任务或者挤占已有任务。对象
若是LinkedBlockingQueue设置是无边界,则maxpoolsize设置无效。队列
若是工做 队列是SynchronousQueue,线程池中的线程数达到corepoolsize核心线程数后会继续建立线程,超过设置的最大线程数后报错。it
三、newFixedThreadPool和newSingleThreadExector使用的是LinkedBlockingQueue的无界模式,newCachedThreadPool使用的是SynchronousQueuethread
四、线程池建立List
Exectors.newFixedThreadPool(int size):建立一个固定大小的线程池。 每来一个任务建立一个线程,当线程数量为size将会中止建立。当线程池中的线程已满,继续提交任务,若是有空闲线程那么空闲线程去执行任务,不然将任务添加到一个无界的等待队列中。
Exectors.newCachedThreadPool():建立一个可缓存的线程池。对线程池的规模没有限制,当线程池的当前规模超过处理需求时(好比线程池中有10个线程,而须要处理的任务只有5个),那么将回收空闲线程。当需求增长时则会添加新的线程。
Exectors.newSingleThreadExcutor():建立一个单线程的Executor,它建立单个工做者线程来执行任务,保证任务先进先出,若是这个线程异常结束,它会建立另外一个线程来代替。
Exectors.newScheduledThreadPool():建立一个固定长度的线程池,并且以延迟或定时的方式来执行任务。
上面都是经过工厂方法来建立线程池,其实它们内部都是经过建立ThreadPoolExector对象来建立线程池的。下面是ThreadPoolExctor的构造函数。线程池