加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何将Object与Thread链接,以便wait()和notify()工作

发布时间:2020-12-15 04:26:40 所属栏目:Java 来源:网络整理
导读:在 Java中,Object和Thread是单独的类.虽然我们有wait()/ notify()方法,但是Java Object源代码没有提到有关monitor / Thread的任何内容. 那么问题是Object的监视器如何知道获取它的线程的细节?这些信息存储在哪里?对象和线程如何链接? 解决方法 一般来说,
在 Java中,Object和Thread是单独的类.虽然我们有wait()/ notify()方法,但是Java Object源代码没有提到有关monitor / Thread的任何内容.

那么问题是Object的监视器如何知道获取它的线程的细节?这些信息存储在哪里?对象和线程如何链接?

解决方法

一般来说,这是依赖于实现的.

Object和Thread的Java代码只是相当肤浅的东西.但真正的工作是通过本地方法完成的.

Java语言规范指定了对象监视器及其等待集应该如何表现,但它没有指定如何实现它.

此外,虽然Java虚拟机具有monitorenter和monitorexit命令,但JVM规范说:

The association of a monitor with an object may be managed in various
ways that are beyond the scope of this specification. For instance,
the monitor may be allocated and deallocated at the same time as the
object. Alternatively,it may be dynamically allocated at the time
when a thread attempts to gain exclusive access to the object and
freed at some later time when no thread remains in the monitor for the
object.

The synchronization constructs of the Java programming language
require support for operations on monitors besides entry and exit.
These include waiting on a monitor (Object.wait) and notifying other
threads waiting on a monitor (Object.notifyAll and
Object.notify). These operations are supported in the standard
package java.lang supplied with the Java Virtual Machine. No
explicit support for these operations appears in the instruction set
of the Java Virtual Machine

这一切都是一回事:对象的实现方式,标题中的内容,监视器的实现方式以及wait()和notify()方法的实现方式都完全取决于编写特定JVM的程序员. Oracle(继承自Sun)的实现可能与IBM或IcedTea的实现完全不同.

此外,即使对于相同的编程团队,实现的细节也在JVM可用的各种操作系统之间不同.原因很明显:JVM依赖于操作系统的线程机制来实现其线程,并且每个操作系统都以非常不同的方式提供对线程的访问.

因此,为Windows编写线程实现的程序员与为Linux或MacOS X编写线程实现的程序员完全不同.线程可能以不同方式锁定,因此操作系统之间的监视器可能完全不同.

总结一下:

>在Java语言规范中定义了对象的监视器和该监视器的等待集的行为方式.>线程管理依赖于操作系统.因此,它必须在本机级别实现,而不是在Java语言本身中实现.>保存监视器所需的数据结构,保存监视器的当前线程,等待集等也都在本机级别,并且在操作系统之间和JVM实现之间可能不同.> Oracle在其自己的JVM中实现所有这些的方式并不一定是唯一正确的方式,其次是所有其他实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读