Java中的监视器是什么?
在Java中的并发编程中提到的监视器是什么?
当我读到“每个物体都与监视器相关联”时,这意味着什么?
这是一个特殊的对象吗?
监视器是控制并发访问对象的机制。
这可以让你做到:
主题1:
public void a() { synchronized(someObject) { // do something (1) } }
主题2:
public void b() { synchronized(someObject) { // do something else (2) } }
这可以防止线程1和2同时访问受监视(同步)的部分。 一个会开始,监视器将阻止另一个在第一个完成之前访问该区域。
这不是一个特殊的对象。 它是放置在类层次结构根的同步机制: java.lang.Object
。
还有wait
和notify
方法也会使用对象的监视器来进行不同线程之间的通信。
监视器是一个拥有locking和等待设置的实体。 在Java中,任何Object
都可以用作监视器。
有关监视器如何在Java中工作的详细说明,我build议阅读Java中Concurrent Programming的Monitor Mechanics部分(前面的链接显示Google书籍中的预览,该部分可供阅读)。
- 监视器是一种概念/机制,不仅限于Java语言,
- “在并发编程中,监视器是一个对象或模块,旨在被多个线程安全地使用”;
- 每个读者都知道,Java中的每个对象都是java.lang.Object的子类。 java人们创buildjava.lang.Object的方式具有使Java程序员能够使用任何对象作为监视器的特性和特性。 例如,每个对象都有一个等待队列,一个重新进入队列以及wait和notify方法使其成为监视器;
- 在这里阅读有关显示器
Java语言和运行时系统通过使用监视器支持线程同步。
监视器与特定的数据项(一个条件variables)相关联,并作为该数据的锁。 当线程持有某个数据项的监视器时,其他线程被locking,不能检查或修改数据。