用Java语言实现一个线程进行如下运算1+2+3+4+….+200,而另一个线程则每隔一个随机产生的时间(0-100毫秒)读取依次第一个线程的当前运算结果并输出。
时间: 2023-12-17 16:05:47 浏览: 66
以下是用Java语言实现的代码示例:
```java
import java.util.Random;
public class Main {
public static void main(String[] args) {
SumThread sumThread = new SumThread();
PrintThread printThread = new PrintThread(sumThread);
sumThread.start();
printThread.start();
try {
sumThread.join();
printThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class SumThread extends Thread {
private int sum;
private Object lock = new Object();
public void run() {
for (int i = 1; i <= 200; i++) {
synchronized (lock) {
sum += i;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public int getSum() {
synchronized (lock) {
return sum;
}
}
}
class PrintThread extends Thread {
private SumThread sumThread;
private Random random = new Random();
public PrintThread(SumThread sumThread) {
this.sumThread = sumThread;
}
public void run() {
while (true) {
try {
Thread.sleep(random.nextInt(100));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("current sum: " + sumThread.getSum());
}
}
}
```
代码中,`SumThread`代表计算和的线程,`PrintThread`代表输出结果的线程。`SumThread`使用`synchronized`关键字和一个锁来保证在计算和的过程中,任何时候只有一个线程能够修改`sum`的值。`PrintThread`每隔一个随机时间间隔读取`SumThread`的计算结果并输出。
在主函数中,我们启动两个线程并等待它们完成运行。当`SumThread`完成计算后,`join()`函数会等待`PrintThread`完成输出,然后整个程序结束。
阅读全文