更新时间: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,并唤醒等待的线程。
使用循环来检查条件是一种良好的做法,可以避免因虚假唤醒而导致的逻辑错误。
【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【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业当天offer率91%,薪资1W+占比54.2%,班级均薪12k+
2025-09-19