Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对象作为监视器_Java_Concurrency_Jvm_Monitor - Fatal编程技术网

Java对象作为监视器

Java对象作为监视器,java,concurrency,jvm,monitor,Java,Concurrency,Jvm,Monitor,我使用了以下资源来获得Java监视器的摘要 下面是我对Java的理解总结 监视器是一个关于线程的对象。这意味着当Java中说所有对象都是监视器时,这意味着每个对象都具有线程感知的特性 线程是一个活动对象。其他对象是被动的>,但知道线程。因此监视!换句话说,被动物体已经被智能化了 为什么叫“监视器”,因为它监视自己!来自什么?>来自活动对象,即线程 监视器有什么意识 a) 它知道当前访问它的线程。{owner} b) 它知道什么线程在等待它,直到满足一个特殊条件>。{wait set} c)

我使用了以下资源来获得Java监视器的摘要

下面是我对Java的理解总结

监视器是一个关于线程的对象。这意味着当Java中说所有对象都是监视器时,这意味着每个对象都具有线程感知的特性

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

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

监视器有什么意识

a) 它知道当前访问它的线程。{owner}

b) 它知道什么线程在等待它,直到满足一个特殊条件>。{wait set}

c) 它知道谁在队列中进入它{entry 集合}

那么线程怎么可能成为对象所有者呢?它必须>获取对象的锁


1对象是锁还是有锁

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

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

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

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

  • 用Java的说法,人们倾向于说每个对象都有一个监视器。语句
    synchronized(anObject)
    表示
    获取anObject的监视器

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

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

    从JVM的角度来看,JVM必须在内部能够执行b和c,但实际上不能执行a