Beim Lesen von Artikeln über Java-Threads fällt mir häufig der Ausdruck auf: "Der aktuelle Thread ist der Eigentümer des Monitors dieses Objekts". Ich verstehe die Bedeutung: Der Thread erhält das Recht, das Objekt zu bearbeiten. Aber ich bin verwirrt, warum wir den Ausdruck "der Monitor des Objekts" anstelle von "die Sperre des Objekts" verwenden?
Kurz gesagt, ich kenne die Bedeutung des Wortes "Monitor" nicht. Die Frage kann seltsam und einfach sein. Aber ich wünschte, jeder könnte helfen, es zu lösen. 3ks
java
multithreading
monitor
Jiafu
quelle
quelle
Antworten:
In der Antwort von ulmangt finden Sie Links, die den in diesem Zusammenhang verwendeten Begriff "Monitor" erläutern. Beachten Sie, dass:
(Quelle: Wikipedia )
Warum den Begriff "Monitor" anstelle von "Sperre" verwenden? Genau genommen bedeuten die Begriffe verschiedene Dinge ... insbesondere, wenn Sie sie so verwenden, wie sie ursprünglich verwendet werden sollten.
Eine "Sperre" ist etwas mit Grundelementen zum Erfassen und Freigeben, die bestimmte Sperreigenschaften beibehalten. zB ausschließliche Verwendung oder Einzelschreiber / Mehrfachleser.
Ein "Monitor" ist ein Mechanismus, der sicherstellt, dass immer nur ein Thread einen bestimmten Abschnitt (oder Abschnitte) von Code zu einem bestimmten Zeitpunkt ausführen kann. Dies kann mithilfe einer Sperre implementiert werden (und "Bedingungsvariablen", mit denen Threads auf die Erfüllung der Bedingung warten oder Benachrichtigungen an andere Threads senden können), ist jedoch mehr als nur eine Sperre. In der Tat ist im Java-Fall die von einem Monitor tatsächlich verwendete Sperre nicht direkt zugänglich. (Sie können einfach nicht "Object.lock ()" sagen, um zu verhindern, dass andere Threads es erwerben ... wie bei einer Java-
Lock
Instanz.)Kurz gesagt, wenn man pedantisch sein sollte, ist "Monitor" tatsächlich ein besserer Begriff als "Sperre", um zu charakterisieren, was Java bietet. In der Praxis werden beide Begriffe jedoch fast synonym verwendet.
quelle
Ein Monitor ist einfach ein Begriff für ein Objekt, dessen Methoden in einer Multithread-Umgebung sicher verwendet werden können.
Es gibt einen großartigen Wikipedia-Artikel über Monitore:
http://en.wikipedia.org/wiki/Monitor_(synchronization)
Wenn Sie nach unten scrollen, wird sogar ein Abschnitt explizit über Java angezeigt .
quelle
Zitat aus der Java Virtual Machine
Monitor
Sperren
quelle
Ein
synchronized
Block um einenobject
ist sein Monitor, der eine Sperre für das Objekt steuert. Hier ein Beispielquelle
Obwohl es spät ist, diese Frage zu beantworten, dachte ich, ich sollte nur hinzufügen, falls es nützlich ist.
Hier ist ein synchronisierter Block von Java-Code innerhalb einer nicht synchronisierten Java-Methode
Im Beispiel wird "this" verwendet. Dies ist die Instanz, für die die add-Methode aufgerufen wird. Eine synchronisierte Instanzmethode verwendet das Objekt, zu dem sie gehört, als Überwachungsobjekt.
=> Innerhalb eines Java-Codeblocks, der auf demselben Monitorobjekt synchronisiert ist, kann nur ein Thread ausgeführt werden.
quelle
Die Java Virtual Machine verwendet Monitore, um Multithreading zu unterstützen. Monitore erreichen dies durch zwei Konzepte: Gegenseitiger Ausschluss beim Ausführen der Threads (hier kommt das Sperren ins Spiel) und Koordination als Mittel der Kommunikation zwischen Threads (hier kommen die Warte- und Benachrichtigungsmethoden des Objekts ins Spiel).
Das Lesen des folgenden Teils aus "Inside JVM" wird diesen Zweifel beseitigen. Wird er hier sehr gut erklärt (Kapitel 20, Thread-Synchronisation)?
https://www.artima.com/insidejvm/ed2/threadsynchP.html
quelle