2. 并发计算模拟 计算从1到1亿整型数相加。要求使用并发程序处理,即采用多线程实现,在主线程中将计算结果累加(不能使用累加公式)。 大致思路: (1)编写SumWorker类,实现Runnable接口,计算从m到n的和,其中m,n由构造方法传入; (2)在主程序中每次开启若干个SumWorker线程(具体数量由程序指定或者用户输入),计算完成之后,将部分结果累加,然后再启动另一批线程,直到计算完成。
时间: 2024-02-11 09:04:57 浏览: 32
Linux课程设计 linux下多线程并发控制的机制分析
好的,我理解了你的问题。针对你的要求,我可以提供以下的代码示例:
```
class SumWorker implements Runnable {
private int m;
private int n;
private int result;
public SumWorker(int m, int n) {
this.m = m;
this.n = n;
this.result = 0;
}
public void run() {
for (int i = m; i <= n; i++) {
result += i;
}
}
public int getResult() {
return result;
}
}
public class ConcurrentSum {
public static void main(String[] args) {
int start = 1;
int end = 100000000;
int numThreads = 10;
int batchSize = end / numThreads;
List<SumWorker> workers = new ArrayList<SumWorker>();
for (int i = 0; i < numThreads; i++) {
int m = start + i * batchSize;
int n = (i == numThreads - 1) ? end : m + batchSize - 1;
SumWorker worker = new SumWorker(m, n);
workers.add(worker);
Thread t = new Thread(worker);
t.start();
}
int result = 0;
for (SumWorker worker : workers) {
try {
Thread t = new Thread(worker);
t.join();
result += worker.getResult();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("The sum of integers from " + start + " to " + end + " is " + result);
}
}
```
在这个例子中,我们首先定义了一个SumWorker类,它实现了Runnable接口,用于计算从m到n的整数和。在主程序中,我们创建了若干个SumWorker线程,并将它们启动。然后我们通过调用每个线程的getResult()方法,获取它们计算出的部分结果,并将它们累加到最终结果中。最后输出计算结果。
这个程序可以通过修改numThreads和batchSize的值来控制线程的数量和每个线程计算的整数范围。在实际应用中,可以根据机器的CPU和内存情况来调整这些参数,以达到最优的计算性能。
阅读全文