ThreadPoolExecutor线程池用法简介

发布时间 2023-07-19 16:42:06作者: jarsing

ThreadPoolExecutor 是 Java 中用于管理线程池的类,它提供了一种方便的方式来执行多线程任务。通过使用线程池,我们可以有效地管理和复用线程,提高程序的性能和资源利用率。

下面是 ThreadPoolExecutor 线程池的详细用法介绍:

  1. 创建线程池对象:

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize,  // 核心线程数,线程池中始终保持活动的线程数
    maximumPoolSize,  // 最大线程数,线程池中允许创建的最大线程数
    keepAliveTime,  // 线程空闲超时时间,超过该时间未执行任务的线程将被回收
    TimeUnit unit,  // 时间单位,如 TimeUnit.SECONDS
    workQueue,  // 任务队列,用于存放待执行的任务
    threadFactory,  // 线程工厂,用于创建新线程
    handler  // 拒绝策略,当线程池无法接受新任务时的处理策略
);

      2. 提交任务给线程池执行:

executor.execute(new Runnable() {
    @Override
    public void run() {
        // 任务执行的代码
    }
});

      3. 关闭线程池:

executor.shutdown();  // 平缓关闭线程池,等待所有任务执行完毕
executor.shutdownNow();  // 立即关闭线程池,尝试中断正在执行的任务

      4. 控制线程池的行为:

    • 核心线程数和最大线程数:通过调整 corePoolSize 和 maximumPoolSize 可以控制线程池的大小,根据任务的特性和系统的资源情况进行合理的配置。
    • 任务队列:workQueue 用于存放待执行的任务,可以选择不同类型的队列,如 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 等,根据任务的特点和需求进行选择。
    • 拒绝策略:当线程池无法接受新任务时,可以通过设置合适的拒绝策略来处理。常见的策略有 AbortPolicy(默认策略,抛出异常)、CallerRunsPolicy(调用者执行任务)、DiscardPolicy(丢弃任务)和 DiscardOldestPolicy(丢弃队列中最旧的任务)。

线程池的使用可以提高多线程任务的执行效率和资源利用率,但需要根据具体的业务需求和系统资源进行合理的配置。合理设置线程池的大小、任务队列和拒绝策略,可以避免线程过多或任务堆积导致的性能问题。