Hallo Java-Jünger,
Die notify()-Methode muss wie die wait()-Methode in einem Synchronized Block aufgerufen werden.
notify() weckt dabei einen wartenden Thread auf.
Was mich nun interessiert: Kann nach dem Aufruf von notify() sofort ein wartender Thread in dem kritischen Bereich (synchronized Block) weiter machen? Da nur ein Thread/Prozess in einem solchen Block aktiv sein kann, frage ich mich was mit dem thread passiert der die notify() methode aufgerufen hat?! wird dieser bis zum verlassen des synchronized Blocks weiter ausgeführt (was ja bedeuten würde das der gerade aufgerufene Thread doch wieder warten muss?!) oder wird die Ausführung des Threads unterbrochen und es wird tatsächlich sofort der wartende Thread aufgeweckt und weitergeführt? ???:L
Bei letzterer Version frage ich mich allerdings wann der Code ausgeführt wird der nach dem notify() und vor dem ende des synchronized Blocks liegt? :bahnhof:
Hinweis: Die "erfinder" des Monitor Konzepts haben dabei unterschiedliche vorschläge gehabt (siehe: Moderne Betriebsysteme von Tannenbaum) - aber wie genau wurde es in java umgesetzt?!
bin für jeden Tipp hilfreich, am besten mit Quellenangabe - ich selbst habe bei meiner recherche aber nichts darüber gefunden...
Danke!
Die notify()-Methode muss wie die wait()-Methode in einem Synchronized Block aufgerufen werden.
notify() weckt dabei einen wartenden Thread auf.
Was mich nun interessiert: Kann nach dem Aufruf von notify() sofort ein wartender Thread in dem kritischen Bereich (synchronized Block) weiter machen? Da nur ein Thread/Prozess in einem solchen Block aktiv sein kann, frage ich mich was mit dem thread passiert der die notify() methode aufgerufen hat?! wird dieser bis zum verlassen des synchronized Blocks weiter ausgeführt (was ja bedeuten würde das der gerade aufgerufene Thread doch wieder warten muss?!) oder wird die Ausführung des Threads unterbrochen und es wird tatsächlich sofort der wartende Thread aufgeweckt und weitergeführt? ???:L
Bei letzterer Version frage ich mich allerdings wann der Code ausgeführt wird der nach dem notify() und vor dem ende des synchronized Blocks liegt? :bahnhof:
Hinweis: Die "erfinder" des Monitor Konzepts haben dabei unterschiedliche vorschläge gehabt (siehe: Moderne Betriebsysteme von Tannenbaum) - aber wie genau wurde es in java umgesetzt?!
bin für jeden Tipp hilfreich, am besten mit Quellenangabe - ich selbst habe bei meiner recherche aber nichts darüber gefunden...
Danke!