【发布时间】:2025-12-06 17:00:02
【问题描述】:
public class ShareResource {
private int n = 0;
public synchronized void p() throws InterruptedException {
while (n > 0) {
wait();
}
n++;
}
public synchronized void r() {
n = 0;
notifyAll();
}
}
如果我用这个资源启动了两个线程并且它们都在 wait() 并且我在资源中调用了方法 r() 会唤醒两个线程而不检查条件吗? 是否会在两个线程中读取代码直到方法结束?在“同一”时间?
【问题讨论】:
-
两个线程都会唤醒,但由于代码是
synchronized,一次只能运行一个线程,因此其中一个线程会在其他线程执行while (n > 0)之前执行n++。
标签: java multithreading wait synchronized notify