Warum sind wait
, notify
und notifyAll
Methoden in Object
platziert, nicht in einer separaten Klasse?Warum wait() und notify() sind nicht in einer speziellen Klasse?
Hinweis, diese Frage geht nicht um sie zu Thread
Klasse zu bewegen, frage ich mich nur, warum sie Object
Wurf, nicht einige neue Monitor
Klasse.
Ich sehe die folgenden Nachteile dieser Idee:
- Wir werden nicht in der Lage sein, unsere für-andere Zwecke als Monitore Felder zu verwenden. Dies scheint jedoch dem Prinzip der Modularität zuzustimmen.
- Synchronisierte Methoden erfordern jetzt einige Hack mit generierten ausgeblendeten Feldern (wie in Schließungen), als
this
und<MyClass>.class
werden nicht gültige Monitore.
So konnten wir 5 Methoden von jedem Objekt mit ein wenig Wehe weg bewegen. Oder nicht?
'Ich frage mich nur, warum sie Object, nicht einige neue Monitor-Klasse.' - konzeptionell, tun sie intern, aber der Monitor ist einzigartig für jedes Objekt. Siehe die doppelte Antwort (obwohl es sich auf "Thread" bezieht) –
@biziclop Genau. Als Per Brinch Hansen die ersten Parallelkonstrukte von Java sah, schrieb er: "Ich habe eindeutig umsonst gearbeitet". Sie scheinen von den unschönen "Sleep/Wakeup()" Interna von UNIX entlehnt worden zu sein. – EJP
* "So könnten wir 5 Methoden von jedem Objekt mit ein bisschen Weh wegziehen" * AFAIK technisch existieren diese Methoden nur einmal, nicht einmal für jede Instanz. – m0skit0