ThreadPoolExecutor线程池

Posted 一响贪欢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadPoolExecutor线程池相关的知识,希望对你有一定的参考价值。

为什么使用线程池:

1、创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率。

2、线程并发数量过多,抢占系统资源从而导致阻塞。

3、对线程进行一些简单的管理。

在java中,线程池的类为ThreadPoolExecutor,该类提供了四种构造方法:

//五个参数的构造函数
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue)

//六个参数的构造函数-1
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory)

//六个参数的构造函数-2
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          RejectedExecutionHandler handler)

//七个参数的构造函数
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

方法中的参数:

int corePoolSize  线程池中核心线程大小

  在线程池中的线程小于核心线程数时,则新建的线程属于核心线程,否则属于非核心线程。默认情况下,核心线程会一直存货于线程池,即使什么也不做。但如果指定类中的allowCoreThreadTimeOut为true,则核心线程闲置一定时间后也会被销毁,具体时间,由参数指定。

int maximumPoolSize  线程池中最大线程数

  线程池中存在的线程数量不会超过最大线程数,如果在达到最大线程数后仍有新的任务需要执行,则会进行排队。

long keepAliveTime  非核心线程的最大存活时间

  线程池中的非核心线程处于闲置状态时,则会开始计时,达到指定时间后将被销毁。如果指定参数allowCoreThreadTimeOut为true,则核心线程同样适用。

TimeUnit unit  keepAliveTime的单位

  类型TimeUnit是枚举类型,包括

    NANOSECONDS : 1微毫秒 = 1微秒 / 1000

    MICROSECONDS : 1微秒 = 1毫秒 / 1000

    MILLISECONDS : 1毫秒 = 1秒 /1000

    SECONDS : 秒

    MINUTES : 分

    HOURS : 小时

    DAYS : 天

BlockingQueue<Runnable> workQueue  任务队列

  等待执行的Runnable对象。

 

原文链接:https://www.jianshu.com/p/210eab345423

以上是关于ThreadPoolExecutor线程池的主要内容,如果未能解决你的问题,请参考以下文章

线程池(ThreadPoolExecutor)源码解析

线程池(ThreadPoolExecutor)源码解析

线程池(ThreadPoolExecutor)源码解析

高并发多线程基础之ThreadPoolExecutor源代码分析

如何获取线程池ThreadPoolExecutor正在运行的线程

线程池ThreadPoolExecutor分析