多线程java并行计算π
时间: 2023-11-12 17:54:56 浏览: 67
多线程Java并行计算π可以通过将计算任务分解成多个子任务,并使用多个线程同时计算这些子任务来实现。可以使用并行计算的方法,例如使用线程池和Callable接口来实现。
下面是一个示例代码,展示了如何使用多线程Java并行计算π:
```java
import java.util.concurrent.*;
public class ParallelCalculation {
private static final int NUM_THREADS = 4; // 设置线程数
private static final long NUM_STEPS = 1000000000L; // 设置步数
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);
long startTime = System.currentTimeMillis();
// 创建并提交多个计算π的任务
Future<Double>[] futures = new Future[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
Callable<Double> task = new PiCalculationTask(i * NUM_STEPS / NUM_THREADS, (i + 1) * NUM_STEPS / NUM_THREADS);
futures[i] = executor.submit(task);
}
// 获取所有子任务的计算结果并求和
double sum = 0;
for (Future<Double> future : futures) {
sum += future.get();
}
double pi = sum / NUM_STEPS * 4;
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("π的近似值: " + pi);
System.out.println("总共用时: " + totalTime + "毫秒");
executor.shutdown();
}
static class PiCalculationTask implements Callable<Double> {
private final long start;
private final long end;
public PiCalculationTask(long start, long end) {
this.start = start;
this.end = end;
}
@Override
public Double call() {
double sum = 0;
for (long i = start; i < end; i++) {
double x = (i + 0.5) / NUM_STEPS;
sum += 4 / (1 + x * x);
}
return sum;
}
}
}
```
通过将计算任务分解成多个子任务,并使用多个线程同时计算这些子任务,可以大大提高计算π的效率。使用线程池可以方便地管理线程,并提供更好的可扩展性和资源管理。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)