有两个线程,线程一的工作任务是计算0-100中偶数的累加和,线程二的任务是计算0-100中奇数的累加和,主线程main需要完成0-100的累加和的任务,main中不允许自行计算0-100的累加和,需要合理调用相应功能的线程完成它的任务。使用java
时间: 2024-10-17 09:04:45 浏览: 14
在Java中,可以使用`ExecutorService`和`Callable`或`Future`来实现这种场景。这里我们可以创建两个线程池,每个线程池对应一个线程执行计算。下面是一个简单的示例:
```java
import java.util.concurrent.*;
public class SumCalculator {
private static ExecutorService executor = Executors.newFixedThreadPool(2); // 创建固定大小的线程池
public static void main(String[] args) {
Future<Integer> evenSumTask = submitEvenNumbers();
Future<Integer> oddSumTask = submitOddNumbers();
try {
int totalSum = evenSumTask.get() + oddSumTask.get(); // 等待两个结果都获取到
System.out.println("Total sum of 0-100 is: " + totalSum);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown(); // 关闭线程池
}
}
private static Future<Integer> submitEvenNumbers() {
return executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i <= 100; i += 2) {
sum += i;
}
return sum;
}
});
}
private static Future<Integer> submitOddNumbers() {
return executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i += 2) {
sum += i;
}
return sum;
}
});
}
}
```
在这个例子中,`submitEvenNumbers()` 和 `submitOddNumbers()` 分别提交了计算偶数和奇数累加和的任务。`main` 线程通过`get()`方法阻塞地等待两个`Future`的结果,最后将它们相加得到总和。
阅读全文