java – 如何将Object与Thread链接,以便wait()和notify()工作
在
Java中,Object和Thread是单独的类.虽然我们有wait()/ notify()方法,但是Java Object源代码没有提到有关monitor / Thread的任何内容.
那么问题是Object的监视器如何知道获取它的线程的细节?这些信息存储在哪里?对象和线程如何链接? 解决方法
一般来说,这是依赖于实现的.
Object和Thread的Java代码只是相当肤浅的东西.但真正的工作是通过本地方法完成的. Java语言规范指定了对象监视器及其等待集应该如何表现,但它没有指定如何实现它. 此外,虽然Java虚拟机具有monitorenter和monitorexit命令,但JVM规范说:
这一切都是一回事:对象的实现方式,标题中的内容,监视器的实现方式以及wait()和notify()方法的实现方式都完全取决于编写特定JVM的程序员. Oracle(继承自Sun)的实现可能与IBM或IcedTea的实现完全不同. 此外,即使对于相同的编程团队,实现的细节也在JVM可用的各种操作系统之间不同.原因很明显:JVM依赖于操作系统的线程机制来实现其线程,并且每个操作系统都以非常不同的方式提供对线程的访问. 因此,为Windows编写线程实现的程序员与为Linux或MacOS X编写线程实现的程序员完全不同.线程可能以不同方式锁定,因此操作系统之间的监视器可能完全不同. 总结一下: >在Java语言规范中定义了对象的监视器和该监视器的等待集的行为方式.>线程管理依赖于操作系统.因此,它必须在本机级别实现,而不是在Java语言本身中实现.>保存监视器所需的数据结构,保存监视器的当前线程,等待集等也都在本机级别,并且在操作系统之间和JVM实现之间可能不同.> Oracle在其自己的JVM中实现所有这些的方式并不一定是唯一正确的方式,其次是所有其他实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |