java 自定义线程池工具类,可以传入线程池名字
时间: 2024-09-14 14:02:06 浏览: 37
ThreadPoolUtil.java
在Java中,我们可以通过ThreadPoolExecutor来创建自定义的线程池。为了方便使用,我们通常会编写一个工具类,其中包含一个或多个静态方法,用于构建并返回配置好的线程池实例。这个工具类可以接受线程池的名字作为参数,以便于对线程池进行区分和管理。
下面是一个简单的示例:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolUtil {
// 创建线程池并返回
public static ExecutorService createThreadPool(String poolName, int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit) {
// 如果核心线程数小于0,则抛出IllegalArgumentException异常
if (corePoolSize < 0) {
throw new IllegalArgumentException("corePoolSize should not be less than zero.");
}
// 如果最大线程数小于0或者小于等于核心线程数,同样抛出IllegalArgumentException异常
if (maximumPoolSize <= 0 || maximumPoolSize < corePoolSize) {
throw new IllegalArgumentException("maximumPoolSize should be greater than or equal to corePoolSize, and should not be less than zero.");
}
// 如果存活时间小于0,则抛出IllegalArgumentException异常
if (keepAliveTime < 0) {
throw new IllegalArgumentException("keepAliveTime should not be less than zero.");
}
// 使用ThreadPoolExecutor创建线程池
return new ThreadPoolExecutor(
corePoolSize, // 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 非核心线程的空闲存活时间
unit, // 空闲存活时间的单位
new LinkedBlockingQueue<Runnable>(), // 使用无界队列来存储任务
new ThreadFactoryBuilder().setNameFormat(poolName + "-%d").build(), // 使用自定义的线程工厂来设置线程名
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
}
}
```
在上面的工具类中,`createThreadPool`方法允许用户输入线程池的名字,并且还能够指定线程池的核心线程数、最大线程数、非核心线程的存活时间等参数。通过这些参数,我们可以根据实际需要定制线程池的行为。
需要注意的是,除了基本的参数外,我们还采用了`LinkedBlockingQueue`作为任务队列,并通过自定义的`ThreadFactory`来设置线程名前缀,以此来满足用户想要传入线程池名字的需求。
阅读全文