返回
初探Java Executor框架(2)——ThreadPoolExecutor线程池的属性和构造器
后端
2023-09-06 04:50:49
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个任务提交到线程池。然后关闭线程池。