java实现阿里规范的手动创建线程池
时间: 2023-07-17 09:01:14 浏览: 131
要在Java中手动创建符合阿里规范的线程池,您可以使用`java.util.concurrent.ThreadPoolExecutor`类进行自定义配置。以下是一个示例:
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
int corePoolSize = 5; // 核心线程数
int maxPoolSize = 10; // 最大线程数
long keepAliveTime = 60; // 线程空闲时间(秒)
int queueCapacity = 100; // 阻塞队列容量
ThreadFactory threadFactory = Executors.defaultThreadFactory(); // 线程工厂
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.AbortPolicy(); // 拒绝策略
// 创建线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(queueCapacity),
threadFactory,
rejectedExecutionHandler
);
// 提交任务给线程池
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("Task " + (i + 1));
executor.execute(worker);
}
// 关闭线程池
executor.shutdown();
try {
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
System.out.println("所有任务已完成");
}
}
class WorkerThread implements Runnable {
private String taskName;
public WorkerThread(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 开始执行任务: " + taskName);
// 执行任务的逻辑代码
System.out.println(Thread.currentThread().getName() + " 完成任务: " + taskName);
}
}
```
在上面的示例中,我们手动创建了一个线程池,其中包括了一些符合阿里规范的配置:
- 核心线程数为5,最大线程数为10;
- 线程空闲时间为60秒,超过空闲时间的线程将被回收;
- 阻塞队列容量为100,超过容量的任务将被拒绝执行;
- 使用默认的线程工厂和拒绝策略;
- 在关闭线程池时,使用`awaitTermination()`方法等待最多10秒钟,如果超时仍有任务未完成,则强制关闭线程池。
请注意,这只是一个示例,您可以根据自己的需求进行适当的调整。
阅读全文