new ThreadPoolExecutor(ui
int coreSize,线程
int maxSize,队列
long time,int timeUnit,it
BlockingQueue<Runnable> taskQueue,io
ThreadFactory threadFactory):thread
参数含义以下:线程池
coreSize:核心线程数im
maxSize :线程最大数时间
time,timeUnit:空闲线程超时时间,超时后线程销毁co
taskQueue:存听任务的队列
threadFactory:建立线程的线程工厂
1.当线程池中的线程数没有达到coreSize时,提交一个任务,不论此时有没有线程处于空闲状态,则会建立一个新的线程!
2.当线程数达到coseSize时,此时在提交任务,若是有线程空闲,则执行任务,若是没有空闲,则放入taskQueue中等待被执行。
3.当taskQueue队列中放满任务时,若是此时全部的线程都处于执行任务期间,再次提交任务,则会建立一个新线程,用于执行队列中的任务,当线程数达到maxSize的时候,若是再次提交任务,若是任务队列已满,而且全部的线程处于活动期间,则提交任务失败,抛出RejectExecutionException.
总之,若是没有设置quitCore=true,核心线程不会被销毁,在线程数达到coreSize以前,每次提交任务都会建立新线程。
线程数达到coreSize后,提交任务会使用空闲线程执行,若是没有空闲线程,则会放到任务队列taskQueue中,等待被执行!
若是队列满了,全部coreSize线程都处于executing task的状态,则会建立一个新线程用于执行队列中的任务。
能够根据几个参数含有,设定具体场景的线程池,Executors中有几个经常使用的线程池以下:
FixedThreadPool(
特色:1每个线程都是核心线程,不设置quitCore=true时,每一个线程都不会被销毁):
new ThreadPoolExecutor(threadSize,threadSize,0,TimeUnit.Seconds,new LinkedBlockingQueue<Runnable>());
CachedThreadPool (
特色:1.没有核心线程,全部线程空闲60秒后销毁
2.无边界,无论提交多少任务,都有线程去马上执行,充分利用了SynchronousQueue容量为0的特色)
new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.Seconds,new SynchronousQueue<Runnable>());
SingleThreadPool(
特色:只有一个核心线程,即按照任务提交的顺序,串行执行任务
new ThreadPoolExecutor(1,1,0L,TimeUnit.Seconds,new LinkedBlockingQueue<Runnable>());
ScheduledThreadPool:
特色是:核心线程数固定,无最大边界,非核心线程空闲即销毁,可延时执行任务
new ScheduledThreadPoolExecutor(coreSize,Integer.MAX_VALUE,0L,TimeUnit.Seconds,new DelayedWorkQueue<Runnable>());