JUC: wait-notify

作者 : admin 本文共535个字,预计阅读时间需要2分钟 发布时间: 2024-06-15 共1人阅读

某个线程在执行的过程中遇到条件不满足而使用的wait方法,就会进入waitset变成waiting状态

blocked是在等待锁,waiting是在等待owner线程调用notify或者notifyall方法,两种状态都不占用CPU时间片

object.wait()  直接变成重量级锁

object.notify()

object.notifyAll()

都必须在对象获得锁之后才能调用,必须放在同步代码块里面

object.wait(long timeout)

表示有时限的等待,如果在时限内没有其他线程唤醒它,就会重新获得锁继续运行

wait和sleep

  1. sleep是Thread方法,wait是Object方法
  2. sleep不强制和synchronized配合使用,wait需要和synchronized配合使用
  3. sleep不会释放对象锁,wait会释放(其他线程就可以释放锁
  4. 它们的状态都是TIMED_WAITING

notify随机唤醒会导致虚假唤醒,改成notifyall

synchronized (lock) {
    while (!condition) {
        lock.wait();
    }
    //do
}

//another Thread
synchornized (lock) {
    lock.notifyAll();
}

本站无任何商业行为
个人在线分享 » JUC: wait-notify
E-->