更新时间: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,并唤醒等待的线程。
使用循环来检查条件是一种良好的做法,可以避免因虚假唤醒而导致的逻辑错误。