gpt4 book ai didi

java - Java中使用监视器类同步线程

转载 作者:行者123 更新时间:2023-12-01 18:12:22 25 4
gpt4 key购买 nike

以下程序创建生成随机数的线程。

我如何更改Monitor,以便它能够以按每个线程ID的顺序打印输出的方式控制线程?

不接受“调用 run 方法而不是 start”之类的解决方案。

给定的类别是:

public class Main {
public static void main(String[] args) {
Monitor mon = new Monitor();
for (int i = 0; i < 20; i++)
new T(i, mon).start();

System.out.println("Finished");
}
}
<小时/>
public class Monitor {

public void print(int id, int num) {
System.out.println("id=" + id + " num=" + num);
}
}
<小时/>
public class T extends Thread {
private int id;
private Monitor mon;

public T(int i, Monitor m) {
id = i;
mon = m;
}

private int calc() {
int num = 0;
for (int i = 0; i < 10; i++)
num = num + (int) (Math.random() * 10);
return num;
}

public void run() {
int num = calc();
mon.print(id, num);
}
}

最佳答案

您只需要尝试打印的线程等待并阻塞,直到其 ID 达到预期的 ID:

public class Monitor {

private final Object lock = new Object();
private int expectedId = 0;

public void print(int id, int num) {
synchronized (lock) {
while (id != expectedId) {
try {
lock.wait();
}
catch (InterruptedException e) {
return;
}
}
System.out.println("id=" + id + " num=" + num);
expectedId++;
lock.notifyAll();
}
}
}

关于java - Java中使用监视器类同步线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com