Java 为什么Object.wait()是final?

Java 为什么Object.wait()是final?,java,Java,在Java中,对象的wait()方法被实现为final方法的原因是什么?是否不需要重写wait()?我们从Java中的synchronized method或synchronized block调用Java中的wait()、notify()或notifyAll方法,以避免: Java中的IllegalMonitorStateException,如果我们不 从synchronized调用wait()、notify()或notifyAll()方法 上下文 等待和通知方法之间的任何潜在竞争条件 在Ja

在Java中,对象的wait()方法被实现为final方法的原因是什么?是否不需要重写wait()?

我们从Java中的synchronized method或synchronized block调用Java中的wait()、notify()或notifyAll方法,以避免:

  • Java中的IllegalMonitorStateException,如果我们不 从synchronized调用wait()、notify()或notifyAll()方法 上下文
  • 等待和通知方法之间的任何潜在竞争条件 在Java中
  • 因此,我想让覆盖等待不是一个好主意()


    请参阅Doug Lea的《Java并发编程(第二版)》第3.2.3节中的更多内容。

    Java语言规范描述了同步是如何工作的。在许多概念中,例如对象监视器,还有同步的概念

    每个对象除了具有关联的监视器外,还具有 关联的等待集。等待集是一组线程

    首次创建对象时,其等待集为空 向等待集添加线程和从等待集中删除线程的操作是 原子。等待集仅通过方法进行操作
    Object.wait
    Object.notify
    Object.notifyAll


    如果您能够重写该方法,您可能会发现自己找到了一种中断同步的方法。Java不允许这样做。它必须控制确切的实现,这就是为什么它是
    final

    ,它不仅是
    final
    ,而且是
    native
    。它是需要在较低的级别。