hymn

忽有故人心头过,回首山河已是秋。

  menu
132 文章
0 浏览
4 当前访客
ღゝ◡╹)ノ❤️

wait 和 notify

waitnotify用于多线程协调运行:

  • synchronized内部可以调用wait()使线程进入等待状态;(获得了锁才能释放锁)
  • 必须在已获得的锁对象上调用wait()方法;
  • synchronized内部可以调用notify()notifyAll()唤醒其他等待线程;
  • 必须在已获得的锁对象上调用notify()notifyAll()方法;
  • 已唤醒的线程还需要重新获得锁后才能继续执行。
  • 在while中调用wait(),如果是if ,在线程被唤醒后继续执行wait()后面得逻辑,不会去重新获得锁;
class TaskQueue {
  Queue<String> queue = new LinkedList<>();

  public synchronized String getTask() throws InterruptedException{
    while (queue.isEmpty()) {
      // 释放this锁:
      this.wait();
      // 重新获取this锁
    }
    return queue.remove();
  }

  public synchronized void addTask(String s) {
    this.queue.add(s);
    this.notifyAll(); // 唤醒在this锁等待的线程
  }
}

标题:wait 和 notify
作者:hymn
地址:https://dxyhymn.com/articles/2020/12/04/1607068520754.html