线程池的应用

https://www.jianshu.com/p/6f82b738ac58

核心参数

通过 ThreadPoolExecutor 创建线程池,有几个核心参数:

corePoolSize 线程池中的核心线程数量;

maximumPoolSize 当前线程池正在运行的最大线程数量;

keepAliveTime 超过 corePoolSize 线程数量的线程最大空闲时间;

unit 以秒为时间单位;

workQueue 创建工作队列,用于存放提交的等待执行任务;


所以有公司要求创建线程的时候,必须要按照这种方式来进行创建。

ExecutorService,有4种线程池可以进行创建,那么学会使用ThreadPoolExecutor的参数后,我们就可以不用局限于最上面那四种线程池,可以按照需要来构建自己的线程池。

newCachedThreadPool

public static ExecutorService newCachedThreadPool() {

        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,

                                      60L, TimeUnit.SECONDS,

                                      new SynchronousQueue());

    }


newFixedThreadPool

public static ExecutorService newFixedThreadPool(int nThreads) {

        return new ThreadPoolExecutor(nThreads, nThreads,

                                      0L, TimeUnit.MILLISECONDS,

                                      new LinkedBlockingQueue());

    }

newScheduledThreadPool

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {

        return new ScheduledThreadPoolExecutor(corePoolSize);

    }

public ScheduledThreadPoolExecutor(int corePoolSize) {

        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,

              new DelayedWorkQueue());

    }

public ThreadPoolExecutor(int corePoolSize,

                              int maximumPoolSize,

                              long keepAliveTime,

                              TimeUnit unit,

                              BlockingQueue workQueue) {

        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

            Executors.defaultThreadFactory(), defaultHandler);

    }

newSingleThreadExecutor

public static ExecutorService newSingleThreadExecutor() {

        return new FinalizableDelegatedExecutorService

            (new ThreadPoolExecutor(1, 1,

                                    0L, TimeUnit.MILLISECONDS,

                                    new LinkedBlockingQueue()));

    }

当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务。

当workQueue未满,先放入到这个队列中。

workQueue它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;

直接提交队列 SynchronousQueue

有界任务队列 ArrayBlockingQueue

无界任务队列 LinkedBlockingQueue

优先任务队列 PriorityBlockingQueue

你可能感兴趣的:(线程池的应用)