请帮我写一个好用的threadpoolexecutor工具类
时间: 2024-05-18 15:11:09 浏览: 99
当然可以帮你写一个好用的`ThreadPoolExecutor`工具类。下面是一个示例代码:
```java
import java.util.concurrent.*;
public class ThreadPoolUtil {
private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors();
private static final int MAX_POOL_SIZE = CORE_POOL_SIZE * 2;
private static final long KEEP_ALIVE_TIME = 60L;
private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
private static final BlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>();
private static ThreadPoolExecutor threadPoolExecutor;
public static synchronized ThreadPoolExecutor getThreadPoolExecutor() {
if (threadPoolExecutor == null) {
threadPoolExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE,
KEEP_ALIVE_TIME, TIME_UNIT, WORK_QUEUE);
}
return threadPoolExecutor;
}
public static void execute(Runnable task) {
getThreadPoolExecutor().execute(task);
}
public static <T> Future<T> submit(Callable<T> task) {
return getThreadPoolExecutor().submit(task);
}
public static void shutdown() {
if (threadPoolExecutor != null) {
threadPoolExecutor.shutdown();
threadPoolExecutor = null;
}
}
}
```
这个工具类封装了一个`ThreadPoolExecutor`实例,并提供了常用的线程池操作方法。你可以通过调用`execute`方法提交一个`Runnable`任务,或者通过调用`submit`方法提交一个`Callable`任务并获取返回结果。在不需要使用线程池时,可以调用`shutdown`方法关闭线程池。
你可以根据自己的需求修改线程池的核心线程数、最大线程数、线程空闲超时时间等参数。这里的示例代码使用了默认的参数,核心线程数为可用处理器数量,最大线程数为核心线程数的两倍。
阅读全文