返回

初探Java Executor框架(2)——ThreadPoolExecutor线程池的属性和构造器

后端

ThreadPoolExecutor概述

ThreadPoolExecutor是Java并发编程库中用于管理线程池的核心类,它可以创建和管理一组线程,并在这些线程上执行任务。ThreadPoolExecutor提供了许多有用的功能,包括:

  • 线程创建:ThreadPoolExecutor可以根据需要创建新线程。
  • 任务调度:ThreadPoolExecutor可以将任务调度到线程上执行。
  • 线程池监控:ThreadPoolExecutor可以监控线程池的运行状态,包括线程数量、任务数量等。
  • 线程池调整:ThreadPoolExecutor可以根据需要调整线程池的大小。

ThreadPoolExecutor属性

ThreadPoolExecutor提供了许多属性,这些属性可以用来配置线程池的行为。下面列出了ThreadPoolExecutor最重要的几个属性:

  • corePoolSize:核心线程数。这是ThreadPoolExecutor在空闲时保持的线程数量。
  • maximumPoolSize:最大线程数。这是ThreadPoolExecutor可以创建的最大线程数量。
  • keepAliveTime:保持活动时间。这是线程在空闲时保持活动的最长时间。
  • workQueue:工作队列。这是ThreadPoolExecutor用来存储等待执行的任务的队列。
  • rejectedExecutionHandler:拒绝执行处理程序。这是ThreadPoolExecutor用来处理被拒绝的任务的处理程序。

ThreadPoolExecutor构造器

ThreadPoolExecutor提供了三个构造器,这些构造器可以用来创建不同的ThreadPoolExecutor实例。下面列出了ThreadPoolExecutor的三个构造器:

  • ThreadPoolExecutor(int corePoolSize,int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue):创建一个ThreadPoolExecutor实例,其中corePoolSize是核心线程数,maximumPoolSize是最大线程数,keepAliveTime是保持活动时间,unit是保持活动时间的单位,workQueue是工作队列。
  • ThreadPoolExecutor(int corePoolSize,int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory):创建一个ThreadPoolExecutor实例,其中corePoolSize是核心线程数,maximumPoolSize是最大线程数,keepAliveTime是保持活动时间,unit是保持活动时间的单位,workQueue是工作队列,threadFactory是线程工厂。
  • ThreadPoolExecutor(int corePoolSize,int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler rejectedExecutionHandler):创建一个ThreadPoolExecutor实例,其中corePoolSize是核心线程数,maximumPoolSize是最大线程数,keepAliveTime是保持活动时间,unit是保持活动时间的单位,workQueue是工作队列,rejectedExecutionHandler是拒绝执行处理程序。

ThreadPoolExecutor使用示例

下面是一个使用ThreadPoolExecutor的示例代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExecutorExample {

    public static void main(String[] args) {
        // 创建一个线程池
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        // 提交任务到线程池
        for (int i = 0; i < 10; i++) {
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println("任务" + Thread.currentThread().getName() + "正在执行");
                }
            });
        }

        // 关闭线程池
        executorService.shutdown();
    }
}

这段代码创建了一个包含5个线程的固定大小的线程池,并将10个任务提交到线程池。然后关闭线程池。