1 累加到100;要求分成五个线程做;Java
时间: 2024-02-22 16:57:53 浏览: 71
Java实现多线程轮流打印1-100的数字操作
在Java中,可以使用`java.util.concurrent`包中的线程池来实现多线程并发计算。具体实现如下:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
// 定义一个全局变量,用于存储累加结果
private static int result = 0;
// 定义一个内部类,实现Runnable接口,用于累加指定范围内的整数
private static class AddNumbers implements Runnable {
private int start;
private int end;
public AddNumbers(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
for (int i = start; i <= end; i++) {
synchronized (Main.class) {
result += i;
}
}
}
}
public static void main(String[] args) throws InterruptedException {
// 创建一个线程池,其中包含5个线程
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 定义每个线程需要累加的数字范围
int[][] ranges = { {1, 20}, {21, 40}, {41, 60}, {61, 80}, {81, 100} };
// 向线程池提交每个线程,并将其执行
for (int[] r : ranges) {
executorService.submit(new AddNumbers(r[0], r[1]));
}
// 关闭线程池,等待所有线程执行完毕
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
// 输出累加结果
System.out.println("Result: " + result);
}
}
```
上述代码中,我们首先定义了一个全局变量`result`,用于存储累加结果。然后,我们定义了一个内部类`AddNumbers`,实现了`Runnable`接口,用于累加指定范围内的整数,并将结果累加到全局变量`result`中。接着,我们使用`java.util.concurrent.Executors`类创建了一个包含5个线程的线程池。然后,我们将需要累加的数字范围分成五个部分,并使用`executorService.submit()`方法向线程池提交每个线程,并将其执行。最后,我们关闭线程池,等待所有线程执行完毕,输出累加结果。由于累加过程中需要修改全局变量`result`,因此我们需要使用`synchronized`关键字来确保线程安全。
阅读全文