在Java中,Object的wait()方法作为最终方法实现的原因是什么?是否需要覆盖wait()?
答案 0 :(得分:4)
Java语言规范描述了同步的工作原理。在众多概念中,如对象监视器,还有Wait Sets的概念。
除了拥有相关的监视器之外,每个对象都有一个 相关的等待集。等待集是一组线程。
首次创建对象时,其等待集为空。初级 向等待集添加线程和从中移除线程的操作是 原子。 仅通过方法操纵等待集
Object.wait
,Object.notify
和Object.notifyAll
。
如果您能够覆盖该方法,您可能会发现自己有办法打破同步。 Java不能允许这样做。它必须能够控制确切的实现,这就是final
的原因。
答案 1 :(得分:1)
我们用Java中的synchronized方法或synchronized块调用Java中的wait(),notify()或notifyAll方法,以避免:
因此,我想让覆盖wait()
不是一个好主意请参阅Doug Lea的“Java并行编程(第二版)”第3.2.3节中的更多内容。