多线程计算 问题描述:创建一个计算线程池,计算 1 到 10 的平方值,并将结果打印出来。要求使用 10 个线程,每个线程计算一个数字的平方。 提示:可以使用 ExecutorService 来管理线程池。
时间: 2024-09-22 07:09:45 浏览: 33
在Java中,可以使用`ExecutorService`和`Callable`或`Runnable`配合`Future`来创建一个多线程的计算任务。这里我们将使用`ExecutorService`、`Callable`和`Future`来计算1到10的平方并打印结果。以下是具体的代码示例:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class MultiThreadedSquareCalculator {
public static void main(String[] args) {
int limit = 10; // 计算范围
ExecutorService executor = Executors.newFixedThreadPool(10); // 创建固定大小的线程池
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 1; i <= limit; i++) {
final int number = i;
futures.add(executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return number * number;
}
}));
}
// 打印结果
for (Future<Integer> future : futures) {
try {
System.out.printf("%d 的平方值: %d%n", future.get(), future.get()); // 获取并打印结果
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
// 关闭线程池
executor.shutdown();
}
}
```
在这个例子中,我们首先创建了一个固定大小为10的线程池。然后,我们循环遍历1到10,对于每一个数,我们创建一个新的`Callable<Integer>`对象,它会返回这个数的平方。我们将这些任务提交给线程池,每个任务对应一个`Future`对象。最后,当所有任务完成后,我们从`Future`中获取结果并打印出来,然后关闭`ExecutorService`。
阅读全文