10

Warten und benachrichtigen scheinen wie Nachrichten, die zwischen Threads übergeben werden, wenn dies zutrifft, müssen Warteschlangen zum Puffern dieser Nachrichten vorhanden sein. Wenn dem so ist, dann müssen atomare Operationen zum Hinzufügen von Nachrichten zu und Entfernen von Nachrichten aus der Warteschlange vorhanden sein, und es muss auch ein Hilfs-Thread für jeden Java-Thread vorhanden sein, der auf diese Nachrichten wartet.Wie funktioniert wait/notify auf JVM-Ebene?

Wäre toll, Ihre Gedanken zu hören.

Antwort

0

Die JVM verwendet vom Betriebssystem bereitgestellte Grundelemente oder manchmal auch eine Bibliothek eines Drittanbieters. Keine JVM implementiert diese Dinge selbst. Windows-JVMs verwenden in der Regel Windows-Threads. Unter Linux kann eine Implementierung entweder Linux-Kernel-Threads oder die Bibliothek POSIX Threads (pthreads) verwenden. Unter Mac OS X umfasst die Auswahl pthreads oder die Cocoa NSThread Bibliothek

1

Warten und benachrichtigen scheint, wie Nachrichten, die zwischen Threads übergeben werden,

Sie sind wirklich keine Nachrichten. Wenn ein Thread wait() aufruft, setzt er sich in die Warteschlange ein, die dem bestimmten Objektmonitor zugeordnet ist. Wenn ein anderer Thread notify() aufruft, wird der erste Thread (falls vorhanden) aus der Warteschlange entfernt und in die Warteschlange "run" versetzt. Es geht darum, den Thread-Status zu ändern und einen Thread in eine Warteschlange zu stellen, nicht Nachrichten zwischen Threads.

Wahrscheinlich gibt es nicht atomare Operationen um Nachrichtenwarteschlangen, aber es gibt sicherlich atomare Operationen um Test

Wenn ja dort dann atomare Operationen aus der Warteschlange für das Hinzufügen von Nachrichten und Entfernen Nachricht sein muss/Festlegen von Speicherorten, die dabei helfen, Sperren zu erhalten und andere Thread-Konflikte zu lösen.

Es muss ein Hilfs-Thread für jeden Java-Thread sein, der auf diese Nachrichten wartet?

Es ist sicherlich nicht ein Hilfs-Thread für jeden Java-Thread. Wenn Java-Threads von einem Zustand in einen anderen übergehen oder in Zeit geschnitten werden, haben sie einen zugeordneten OS-Thread, der seinen Zustand beibehält und das gesamte Messaging und die Signalisierung durchführt. Bei den meisten (wenn nicht allen) Implementierungen gibt es auch das Betriebssystem und die Hardware, die sich um die Thread-Planung kümmern, wobei der JVM-native Code das Java-Accounting ausführt.