更新时间:2024-03-19 来源:黑马程序员 浏览量:

在Java中,wait()方法通常与synchronized关键字一起使用来实现线程之间的协作。wait()方法会使当前线程等待,直到其他线程调用相同对象上的notify()或notifyAll()方法来唤醒等待线程。
通常情况下,使用wait()方法时都会在循环中检查条件。这是因为线程在被唤醒后,需要重新检查条件是否满足,以确保它们真正应该继续执行。如果不在循环中检查条件,可能会发生虚假唤醒(spurious wakeups),导致程序逻辑错误。
以下是一个使用wait()和循环来实现线程协作的示例:
public class WaitNotifyExample {
private Object lock = new Object();
private boolean condition = false;
public void waitForCondition() throws InterruptedException {
synchronized (lock) {
while (!condition) {
lock.wait(); // 在循环中调用wait()
}
// 执行等待后的逻辑
System.out.println("Condition is now true!");
}
}
public void setConditionTrue() {
synchronized (lock) {
condition = true;
lock.notify(); // 唤醒等待线程
}
}
}在上面的例子中,waitForCondition()方法中使用了一个while循环来检查条件condition是否为true,如果不是,则调用wait()方法等待。setConditionTrue()方法用于将条件设置为true,并唤醒等待的线程。
使用循环来检查条件是一种良好的做法,可以避免因虚假唤醒而导致的逻辑错误。
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19