Worauf bezieht sich ein Monitor bei der gleichzeitigen Programmierung in Java?
Wenn ich lese, dass "jedem Objekt ein Monitor zugeordnet ist", was bedeutet das?
Ist es ein besonderes Objekt?
Worauf bezieht sich ein Monitor bei der gleichzeitigen Programmierung in Java?
Wenn ich lese, dass "jedem Objekt ein Monitor zugeordnet ist", was bedeutet das?
Ist es ein besonderes Objekt?
Antworten:
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 Threads 1 und 2 gleichzeitig auf den überwachten (synchronisierten) Abschnitt zugreifen. Einer startet und der Monitor verhindert, dass der andere auf die Region zugreift, bevor der erste beendet ist.
Es ist kein besonderes Objekt. Der Synchronisationsmechanismus befindet sich im Stamm der Klassenhierarchie:java.lang.Object
.
Darüber hinaus gibt es wait
und notify
Methoden , die auch Gegenstand des Monitors auf die Kommunikation zwischen den verschiedenen Threads verwenden.
Class
für statische Methoden das entsprechende Objekt sind. Wenn Sie bereits eine synchronisierte Methode1 () haben und die Methode2 () als synchronisiert deklarieren, werden keine neuen Monitore erstellt. Wenn Sie eine der beiden Methoden (für dasselbe Objekt) aufrufen, wird versucht, denselben Monitor zu sperren. Dies fängt oft Neuankömmlinge auf.
Ein Monitor ist eine Entität, die sowohl eine Sperre als auch eine Wartezeit besitzt . In Java kann jeder Object
als Monitor dienen.
Für eine detaillierte Erklärung der Funktionsweise von Monitoren in Java empfehle ich, den Abschnitt Monitor Mechanics der Concurrent Programming in Java zu lesen (der vorhergehende Link zeigt die Vorschau in Google-Büchern an und dieser Abschnitt steht zum Lesen zur Verfügung).
Wakes up all threads that are waiting on this object's monitor.
über notifyall () sagt , ist das, was ich bekomme, Objekt behält (mit Hilfe der internen Entität / Objekt), was alle Threads auf Sperre warten, diese interne Entität / Objekt wird Monitor genannt?
Die Java-Sprache und das Laufzeitsystem unterstützen die Thread-Synchronisation 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, sind andere Threads gesperrt und können die Daten nicht überprüfen oder ändern.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Ein Mechanismus zum Steuern des Zugriffs auf Objekte nacheinander
Monitor ist ein Synchronisationskonstrukt, mit dem Threads sowohl gegenseitig ausgeschlossen als auch warten (blockieren) können, bis eine bestimmte Bedingung erfüllt ist.
Monitore verfügen auch über einen Mechanismus zum Signalisieren anderer Threads, dass ihre Bedingung erfüllt wurde. Es ist eine Entität, die sowohl eine Sperre als auch eine Wartezeit besitzt. In Java kann jedes Objekt als Monitor dienen.
In der virtuellen Java-Maschine ist jedes Objekt und jede Klasse einem Monitor logisch 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.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
Der Monitor ist einem Objekt oder Datenelement zugeordnet, das erfasst wird, wenn ein Datenelement oder Objekt eingegeben wird. Dies ist ein Synchronisationsblock (kritischer Abschnitt) und wird freigegeben, wenn es beendet wird.