wake-up-neo.com

Was ist ein Monitor in Java?

Was ist ein Monitor, auf den sich die gleichzeitige Programmierung in Java bezieht?

Wenn ich lese, dass "jedem Objekt ein Monitor zugeordnet ist", was bedeutet das?

Ist es ein besonderes Objekt?

111
xdevel2000

Ein Monitor ist ein Mechanismus zur Steuerung des gleichzeitigen Zugriffs auf ein Objekt.

Dies ermöglicht Ihnen Folgendes:

Thread 1:

public void a()
{
    synchronized(someObject) {
        // do something (1)
    }
}

Thread 2:

public void b()
{
    synchronized(someObject) {
        // do something else (2)
    }
}

Dies verhindert, dass die Threads 1 und 2 gleichzeitig auf den überwachten (synchronisierten) Bereich zugreifen. Einer wird gestartet, und der andere wird vom Monitor daran gehindert, auf die Region zuzugreifen, bevor der erste beendet ist.

Es ist kein spezielles Objekt. Der Synchronisationsmechanismus befindet sich im Stammverzeichnis der Klassenhierarchie: Java.lang.Object.

Es gibt auch Methoden wait und notify, die den Monitor des Objekts auch für die Kommunikation zwischen verschiedenen Threads verwenden.

78

Ein Monitor ist eine Entität, die sowohl eine Sperre als auch eine Wartemenge besitzt. . In Java kann jedes Object als Monitor dienen.

Für eine detaillierte Erklärung, wie Monitore in Java funktionieren, empfehle ich das Lesen des Abschnitts Monitor Mechanics von Concurrent Programming in Java (der vorhergehende Link zeigt die Vorschau in Google-Büchern an und dieser Abschnitt steht zum Lesen zur Verfügung).

24
JRL
  1. Ein Monitor ist ein Konzept/Mechanismus, der nicht auf die Sprache Java beschränkt ist.
  2. "Bei der gleichzeitigen Programmierung ist ein Monitor ein Objekt oder ein Modul, das von mehr als einem Thread sicher verwendet werden soll."
  3. Wie jeder Leser weiß, ist jedes Objekt in Java eine Unterklasse von Java.lang.Object. Die Java Leute haben Java.lang.Object so erstellt, dass es Funktionen und Eigenschaften aufweist, die es Java Programmierern ermöglichen, jedes Objekt als Monitor zu verwenden. Zum Beispiel hat jedes Objekt eine Warteschlange, eine Warteschlange für erneute Zugriffe sowie Wartemethoden und Benachrichtigungsmethoden, die es zu einem Monitor machen.
  4. lesen Sie über Monitore hier .
9
mgibson

Das Java Sprach- und Laufzeitsystem unterstützt die Synchronisation von Threads mithilfe von Monitoren.
Ein Monitor ist einem bestimmten Datenelement (einer Bedingungsvariablen) zugeordnet und fungiert als Sperre für diese Daten. Wenn ein Thread den Monitor für ein Datenelement enthält, werden andere Threads gesperrt und können die Daten nicht überprüfen oder ändern.

4
user7587921

http://Java.Sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308

Ein Mechanismus , um den Zugriff auf Objekte nacheinander zu steuern

3
naikus

Monitor ist ein Synchronisationskonstrukt, das es Threads ermöglicht, sich gegenseitig auszuschließen und zu warten (blockieren), bis eine bestimmte Bedingung erfüllt ist.

Monitore verfügen auch über einen Mechanismus, der anderen Threads signalisiert, dass ihre Bedingung erfüllt ist. Es ist eine Entität, die sowohl eine Sperre als auch eine Wartemenge besitzt. In Java kann jedes Objekt als Monitor dienen.

In der virtuellen Maschine Java) ist jedes Objekt und jede Klasse logisch einem Monitor zugeordnet. Um die Fähigkeit zum gegenseitigen Ausschluss von Monitoren zu implementieren, wird jedem Objekt und jeder Klasse eine Sperre (manchmal auch als Mutex bezeichnet) zugeordnet Dies wird in Betriebssystemen als Semaphor bezeichnet, Mutex ist ein binäres Semaphor.

Weitere Informationen finden Sie unter dem Link

2
Swati Gour

http://journals.ecs.soton.ac.uk/Java/tutorial/Java/threads/monitors.html

monitor ist dem Objekt oder Datenelement zugeordnet, das erfasst wird, wenn ein Datenelement oder ein Objekt eingegeben wird, und das beim Beenden des Synchronisationsblocks (kritischer Abschnitt) freigegeben wird.

1
Amit Rai