ThreadPoolExecutor的几个参数理解

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>());

相关文章
相关标签/搜索