线程池提交10个任务,每个任务有值返回,等待所有任务一起返回,实例代码 java
时间: 2024-01-28 08:41:04 浏览: 57
好的,这是一个比较常见的Java多线程问题,你可以使用Java的线程池框架来实现。下面是一个简单的代码示例,供参考:
```
import java.util.*;
import java.util.concurrent.*;
public class ThreadPoolDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建线程池,可根据实际情况调整线程池大小
ExecutorService executor = Executors.newFixedThreadPool(10);
// 创建 Callable 任务集合
List<Callable<Integer>> tasks = new ArrayList<>();
for (int i = 0; i < 10; i++) {
final int j = i;
Callable<Integer> task = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// 模拟耗时操作,返回结果
Thread.sleep(1000);
return j;
}
};
tasks.add(task);
}
// 提交任务到线程池
List<Future<Integer>> results = executor.invokeAll(tasks);
// 等待所有任务完成
int sum = 0;
for (Future<Integer> result : results) {
sum += result.get();
}
// 输出结果
System.out.println("总和为:" + sum);
// 关闭线程池
executor.shutdown();
}
}
```
这段代码实现了提交10个任务到一个线程池中,并等待所有任务一起返回。使用 `Callable` 接口可以让任务有返回值。使用 `invokeAll` 方法可以提交任务并等待所有任务执行完毕,返回结果集合中包含所有任务的返回值。最后将所有返回值相加即可。
阅读全文