Him*_*ire 3 java multithreading
在Java中Object
,它Thread
是独立的类.Java Object
源代码没有提到有关monitor /的任何内容,Thread
尽管我们有wait()
/ notify()
methods.
那么问题是该Object
监视器如何知道获取它的线程的细节?这些信息存储在哪里?对象和线程如何链接?
一般来说,这是依赖于实现的.
同时为Java代码Object
和Thread
只做相当肤浅的东西.但真正的工作是通过本地方法完成的.
Java语言规范指定了对象监视器及其等待集应该如何表现,但它没有指定如何实现它.
此外,虽然Java虚拟机的命令monitorenter
和monitorexit
,JVM规范,说:
可以以超出本说明书范围的各种方式管理监视器与对象的关联.例如,可以与对象同时分配和释放监视器.或者,它可以在线程试图获得对对象的独占访问时被动态地分配,并且在稍后没有线程保留在对象的监视器中时释放.
除了进入和退出之外,Java编程语言的同步构造还需要支持监视器上的操作.这些包括等待监视器(
Object.wait
)并通知在监视器上等待的其他线程(Object.notifyAll
和Object.notify
).java.lang
Java虚拟机随附的标准软件包支持这些操作.Java虚拟机的指令集中不显示对这些操作的明确支持
这一件事情的全部款项:究竟如何对象实现,什么是在它的头,它的显示器是如何实现的,以及如何wait()
和notify()
方法实现都完全取决于谁写的特定JVM的程序员.Oracle(继承自Sun)的实现可能与IBM或IcedTea的实现完全不同.
此外,即使对于相同的编程团队,实现的细节也在JVM可用的各种操作系统之间不同.原因很明显:JVM依赖于操作系统的线程机制来实现其线程,并且每个操作系统都以非常不同的方式提供对线程的访问.
因此,为Windows编写线程实现的程序员与为Linux或MacOS X编写线程实现的程序员完全不同.线程可能以不同方式锁定,因此操作系统之间的监视器可能完全不同.
总结一下:
归档时间: |
|
查看次数: |
73 次 |
最近记录: |