Java线程池(ThreadPoolExecutor)是一种执行器(Executor),用于在一个后台线程中执行任务。线程池的主要目的是减少在创建和销毁线程时所产生的性能开销。以下是线程池的七个关键参数的详解和配置方法:
corePoolSize时,新任务会直接创建新线程来执行,而不会先放入工作队列。Runtime.getRuntime().availableProcessors()返回的处理器数量。corePoolSize可以设置为处理器数量;对于IO密集型任务,可以设置为处理器数量的两倍或更多。maximumPoolSize,线程池会创建新线程来执行任务。Integer.MAX_VALUE。corePoolSize + (核心数 * 2)。corePoolSize时,多余的空闲线程能够保持多久(单位:时间)。corePoolSize的线程在空闲时间后会被终止,直到线程数量等于corePoolSize。TimeUnit一起使用。keepAliveTime参数的时间单位。TimeUnit.SECONDS。TimeUnit.NANOSECONDS、TimeUnit.MICROSECONDS、TimeUnit.MILLISECONDS等。corePoolSize,新任务会被放入工作队列中等待执行。LinkedBlockingQueue、SynchronousQueue和ArrayBlockingQueue。LinkedBlockingQueue适用于大量任务积压的情况,而SynchronousQueue可以用于减少线程创建的延迟。maximumPoolSize时,新任务会根据rejectedExecutionHandler指定的策略被处理。AbortPolicy。CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy等。import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.Executors;
public class ThreadPoolConfigExample {
public static void main(String[] args) {
// 核心池大小
int corePoolSize = 10;
// 最大池大小
int maximumPoolSize = 50;
// 线程空闲时间
long keepAliveTime = 120;
// 时间单位
TimeUnit unit = TimeUnit.SECONDS;
// 工作队列
ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(100);
// 线程工厂
ThreadFactory threadFactory = Executors.defaultThreadFactory();
// 饱和策略
RejectedExecutionHandler rejectedExecutionHandler = new AbortPolicy();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue,
threadFactory,
rejectedExecutionHandler
);
// 示例:提交任务到线程池
threadPoolExecutor.execute(() -> {
System.out.println("Task is running");
});
// 关闭线程池
threadPoolExecutor.shutdown();
}
}