线程池(ThreadPoolExcutor)基本介绍

线程池:ThreadPoolExecutor

不做过多介绍了,java源码中有详细英文介绍

构造函数:

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

七大参数基本介绍:

*   corePoolSize:核心线程数[一直存在,除非allowCoreThreadTimeOut],创建好了就一直存在,等待接受任务去执行
*   maximumPoolSize:最大线程数量;控制资源
*   keepAliveTime:存活时间,如果当前正在运行的线程数量大于核心数量。
*                  可以释放空闲线程(maximumPoolSize-corePoolSize)(线程空闲时间大于指定的keepAliveTime)
*   unit:时间单位
*   workQueue:阻塞队列,如果任务有很多,就将目前多的任务放在队列中
*                      只要有线程空闲,就会去队列中取出新的任务去执行
*   threadFactory:线程的创建工厂
*   handler:如果当前阻塞队列满了,就会执行该策略拒绝任务

线程池工作顺序:

*   1)线程池创建,准备好核心线程,准备接收任务
*   1.1 core满了,就将进来的任务放在阻塞队列中,空闲的core就会自己去阻塞队列中获取执行
*   1.2 阻塞队列满了,就直接开启新线程执行,最大只能开启到maximumPoolSize的线程数目
*   1.3 maximumPoolSize满了,就采用handler去拒绝任务
*   1.4 maximumPoolSize都执行完成,就会有很多的线程空闲,在指定的时间keepAliveTime以后,释放maximumPoolSize-corePoolSize这些线程

常见四种线程池:

         *  newCachedThreadPool:创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收线程,若无可回收,则新建线程
         *  newFixedThreadPool:创建一个定长线程池,可控制最大并发数
         *  newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行
         *  newSingleThreadExecutor:创建一个单线程化的线程池,只有唯一一个线程来执行任务

基本使用:

一般来说ExecutorService的创建,不会写在业务方法中。

public static ExecutorService service = Executors.newFixedThreadPool(10);
service.execute(() -> {});
原文地址:https://www.cnblogs.com/wwjj4811/p/13945280.html