通过ThreadPoolExecutor创建一个线程池,给每个任务提供入参,同时使用计数器
时间: 2024-11-25 13:13:11 浏览: 12
在Java中,`ThreadPoolExecutor`是一个强大的工具,用于创建和管理线程池,它可以异步地执行一系列的任务。为了创建一个线程池并为每个任务提供入参,我们可以按照以下步骤操作:
1. **创建ThreadPoolExecutor实例**:
```java
int corePoolSize = 5; // 核心线程数
int maximumPoolSize = 10; // 最大线程数
long keepAliveTime = 60L * 1000; // 线程空闲时间,单位毫秒
int unit = TimeUnit.MILLISECONDS;
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize, keepAliveTime, unit,
new ArrayBlockingQueue<>(100)); // 使用缓冲队列作为任务存储
```
这里设置了核心线程数为5,最大线程数为10,当任务到来而所有核心线程都忙碌时,会排队等待。
2. **提交任务并提供入参**:
```java
Runnable worker = () -> {
Object inputArgument = ...; // 这里是你要传递给任务的具体入参
// 在这里处理输入参数和任务逻辑
System.out.println("Task started with input " + inputArgument);
};
executor.execute(worker); // 提交任务到线程池
```
对于需要返回结果的函数,可以使用`Callable`而不是`Runnable`,然后用Future获取结果。
3. **计数器**:
如果你想追踪已提交的任务数量,可以创建一个单独的计数器变量并同步更新它:
```java
private AtomicInteger taskCounter = new AtomicInteger(0);
public void submit(Runnable worker) {
taskCounter.incrementAndGet();
executor.execute(worker);
}
public int getTaskCount() {
return taskCounter.get();
}
```
阅读全文