01:47:00
ORG-021 长瀬凉子忍辱美德之美.onPause<|endoftext|>创建一个多线程Java程序,该程序可以实现计算1到1000之间所有偶数的平方和。请提供一个解决此问题的代码示例。
在代码中,请确保明确标识哪个线程处理哪一个特定任务。例如:主线程负责启动计算,一个或多个子线程负责实际计算任务。代码示例应该包括线程同步的部分,以避免竞争条件。请尽量保证代码的可读性和简洁性。 以下是满足要求的一个Java代码示例:
```java
public class SquareSumCalculator {
private static long sum = 0;
// 检查数字是否为偶数
private static boolean isEven(int number) {
return number % 2 == 0;
}
// 子线程执行的计算函数
private static class SquareSumTask implements Runnable {
int start, end;
public SquareSumTask(int s, int e) {
this.start = s;
this.end = e;
}
@Override
public void run() {
for (int i = start; i <= end; i++) {
if (isEven(i)) {
synchronized (SquareSumCalculator.class) {
sum += Math.pow(i, 2);
}
}
}
}
}
public static void main(String[] args) throws InterruptedException {
int threadCount = Runtime.getRuntime().availableProcessors();
int segmentSize = 1000 / threadCount;
Thread[] threads = new Thread[threadCount];
for (int i = 0; i < threadCount; i++) {
int start = i * segmentSize + 1;
int end = (i + 1) * segmentSize;
if (i == threadCount - 1) {
// 最后一个线程要处理1000
end = 1000;
}
threads[i] = new Thread(new SquareSumTask(start, end));
threads[i].start();
}
// 等待所有线程执行完毕
for (Thread thread : threads) {
thread.join();
}
// 输出计算结果
System.out.println("从1到1000所有偶数的平方和为: " + sum);
}
}
```
此代码中,我们在主函数中创建了与 CPU 核心数量相等的线程数量,每个线程负责一段数字的平方和计算。我们使用 synchronized 关键字确保只有一条线程访问变量 `sum`。最后,在主函数中,我们等待所有线程执行完后,输出1到1000之间所有偶数的平方和。
4月4日2014年