gpt4 book ai didi

Java 等待、通知 - 等待不起作用?

转载 作者:行者123 更新时间:2023-12-01 11:33:09 26 4
gpt4 key购买 nike

我正在学习使用Java 中的Thread 进行工作。我正在尝试编写一个有两个线程的程序。每个线程都会在循环中写入你的名字。在 Main 运行周期中将生成数字 ( 0 , 9 )。当它生成奇数时,等待线程 1(偶数 - 线程 2)。如果一个线程会 hibernate 并唤醒他。问题是当我调用 wait 时,程序卡住了。代码:

import java.util.Random;

public class TestClass {


public static void main(String[] args) throws InterruptedException {

myThread one = new myThread("Thread one");
myThread two = new myThread("Thread two");

one.start();
two.start();

Random random = new Random();

for (int i = 0; i < 10; i++) {
int rnd = random.nextInt(10);
if (rnd % 2 == 0) {
synchronized (two) {
two.wait(); // first loop - freez
}
} else {
synchronized (one) {
one.wait();
}
}
}

}

}

class myThread extends Thread {

private boolean canIRun = true;
private final String name;

myThread(String name) {
this.name = name;
}

@Override
public void run() {
while (canIRun) {
System.out.println("My name is: " + name);
}
}

}

最佳答案

您的程序中有三个线程,Main thread是程序开始执行的地方,输入 main()方法。 Main thread创建两个线程,即线程一线程二。线程一和线程二运行其 run()方法。 Main thread正在运行 main()方法。当您调用one.wait()时在main()方法,它暂停当前线程,即 Main thread不会暂停Thread one two.wait() 也是如此,它暂停 Main thread也。现在Main thread仅当任何其他线程调用 notify() 时才能恢复或notifyAll()在同一个对象上 onetwo ,无论哪个对象使其暂停。

在您的程序中,Main thread卡住,但另外两个线程继续执行,直到程序终止。

关于Java 等待、通知 - 等待不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263148/

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