首页常见问题正文

Java中如何调用wait()方法的?使用if块还是循环?

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

IT培训班

  在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,并唤醒等待的线程。

  使用循环来检查条件是一种良好的做法,可以避免因虚假唤醒而导致的逻辑错误。

分享到:
在线咨询 我要报名
和我们在线交谈!