java并行计算π的执行时间
时间: 2023-07-24 20:25:30 浏览: 114
好的,我们可以使用Java的System.currentTimeMillis()方法来获取程序的执行时间。以下是计算π的并行实现的Java代码,包括计算执行时间:
```
import java.util.concurrent.*;
public class ParallelPi {
public static void main(String[] args) throws InterruptedException, ExecutionException {
int numThreads = 4; // 设定线程数
int numSteps = 100000000; // 计算π的步数
double step = 1.0 / numSteps; // 步长
ExecutorService executor = Executors.newFixedThreadPool(numThreads); // 创建线程池
long startTime = System.currentTimeMillis(); // 记录开始时间
Future<Double>[] futures = new Future[numThreads]; // 创建Future数组
for (int i = 0; i < numThreads; i++) {
int start = i * numSteps / numThreads;
int end = (i + 1) * numSteps / numThreads;
Callable<Double> task = new PiCalculator(start, end, step); // 创建任务
futures[i] = executor.submit(task); // 提交任务
}
double sum = 0.0;
for (int i = 0; i < numThreads; i++) {
sum += futures[i].get(); // 合并结果
}
double pi = step * sum * 4.0;
long endTime = System.currentTimeMillis(); // 记录结束时间
System.out.println("π ≈ " + pi);
System.out.println("执行时间:" + (endTime - startTime) + "ms");
executor.shutdown(); // 关闭线程池
}
}
class PiCalculator implements Callable<Double> {
private final int start;
private final int end;
private final double step;
public PiCalculator(int start, int end, double step) {
this.start = start;
this.end = end;
this.step = step;
}
@Override
public Double call() throws Exception {
double sum = 0.0;
for (int i = start; i < end; i++) {
double x = (i + 0.5) * step;
sum += 1.0 / (1.0 + x * x);
}
return sum;
}
}
```
以上代码中,我们使用了Java的System.currentTimeMillis()方法来记录程序的开始时间和结束时间,最后输出执行时间。需要注意的是,由于计算π的步数较大,计算时间可能会比较长。
阅读全文