0

我使用以下资源来总结 Java 监视器,

http://www.informit.com/store/concurrent-programming-in-java-design-principles-and-9780201310092

http://www.artima.com/insidejvm/ed2/threadsynch.html

以下是我在Java上下文中的理解总结,

Monitor 是一个被授予线程的对象。这 > 意味着在 Java 中说所有对象都是监视器 > 这意味着每个对象都具有线程感知特性。

线程是一个活动对象。其他对象是被动的>但知道线程。因此监视器!换句话说,被动对象已被智能化。

为什么叫“监控器”,因为它监控自己!从何而来 ?>来自活动对象,即线程

监视器有什么意识?

a) 它知道当前是哪个线程访问它。{owner}

b)它知道有哪些线程在等待它,直到满足特殊条件>。{wait set}

c) 它知道谁在排队进入它{entry set}

那么线程如何成为对象的所有者,它必须>获取该对象的锁!


1 对象是锁还是有锁?

2 以上a、b、c 是对象状态的一部分还是由JVM 跟踪(保持记录并将其与对象ID 等相关联)?

4

2 回答 2

1

Java 中的每个对象都有一个与之关联的监视器。监视器是一种本质上等同于可重入锁的构造。同一个线程可以多次进入监视器,并计算条目数并与出口匹配。

您关于“主动”和“被动”对象的结论没有多大意义。(我不是说他们错了;我是说我不明白你想说什么。)

JVM 中监视器的语义是明确定义的,但实现不是,并且有多种方式可以实现监视器。JVM 以 JVM 作者决定的某种方式跟踪 a/b/c 中的所有项目。由于大多数对象的监视器从未使用过,因此一种策略是拥有一个与堆分开的监视器表,其中包含struct对象的 JVM ID、监视器中当前的线程和条目计数。

于 2013-10-12T15:57:36.287 回答
1
  1. 在 Java 语言中,人们倾向于说每个对象都有一个监视器。该声明的synchronized( anObject )意思是acquire anObject's monitor

  2. 一个对象不“知道”当前访问它的线程。在某个时间点,一个对象可能在多个线程中处于活动状态。

    语言的角度来看,没有办法列出当前使用对象的线程(a),也没有办法列出等待它的线程(b 和 c)。

    JVM 的角度来看,JVM 必须在内部能够做到 b 和 c,但不能真正做到 a。

于 2013-10-14T07:37:07.770 回答