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

还有waitnotify方法也会使用对象的监视器来进行不同线程之间的通信。

监视器是一个拥有locking等待设置的实体。 在Java中,任何Object都可以用作监视器。

有关监视器如何在Java中工作的详细说明,我build议阅读Java中Concurrent Programming的Monitor Mechanics部分(前面的链接显示Google书籍中的预览,该部分可供阅读)。

  1. 监视器是一种概念/机制,不仅限于Java语言,
  2. “在并发编程中,监视器是一个对象或模块,旨在被多个线程安全地使用”;
  3. 每个读者都知道,Java中的每个对象都是java.lang.Object的子类。 java人们创buildjava.lang.Object的方式具有使Java程序员能够使用任何对象作为监视器的特性和特性。 例如,每个对象都有一个等待队列,一个重新进入队列以及wait和notify方法使其成为监视器;
  4. 在这里阅读有关显示器

Java语言和运行时系统通过使用监视器支持线程同步。
监视器与特定的数据项(一个条件variables)相关联,并作为该数据的锁。 当线程持有某个数据项的监视器时,其他线程被locking,不能检查或修改数据。