Hi,
in der Vorbereitung fürs Java-Examen bin ich auf folgende Übungsfrage gestoßen, die ich mal übersetze und von den Bezeichnern her mal so bisschen abwandle - die Antworten lass ich am besten mal so, wie sie sind.
Peter arbeitet bei Firma x und entwickelt eine Applikation in Java.
Er definiert einen Monitor namens JMoni, der zehn Threads in seinem Wartepool beinhaltet.
Alle Threads haben die gleiche Priorität. Er möchte nun genau einem dieser Threads namens jThr ein notify-Signal senden, sodass jThr vom wait-Status in den ready-Status übergeht. Wie kann er das bewerkstelligen?
Hier die angebotenen Antworten:
a) Execute notify(jThr); statement from the synchronized code of jMoni
b) Execute jMoni.notify(jThr); statement from the synchronized code of any thread
c) Execute jMoni.notify(jThr); statement from the synchronized code of jMoni
d) Execute jMoni.notify(jThr); statement from the code of any thread
e) He cannot specify the thread to be notified.
Richtig soll e) sein und ich will auch gar nicht mal bezweifeln, dass das so ist.
Aber WARUM geht das nicht? Geht das überhaupt nicht oder geht es nur nicht mit den von a) bis d) angebotenen Methoden?
Ich weiß natürlich nicht, wie jMoni.notify() konkret ausschaut - aber würde man ein synchronisiertes jThr.notify() verwenden, würde es doch anders ausschauen? Man kann doch einem Thread-Objekt von einem synchronisierten Code-Block aus ein notify-Signal schicken, indem man thr.notify() aufruft - man braucht halt die Referenz darauf - oder sehe ich das falsch?
Gruß Michi
in der Vorbereitung fürs Java-Examen bin ich auf folgende Übungsfrage gestoßen, die ich mal übersetze und von den Bezeichnern her mal so bisschen abwandle - die Antworten lass ich am besten mal so, wie sie sind.
Peter arbeitet bei Firma x und entwickelt eine Applikation in Java.
Er definiert einen Monitor namens JMoni, der zehn Threads in seinem Wartepool beinhaltet.
Alle Threads haben die gleiche Priorität. Er möchte nun genau einem dieser Threads namens jThr ein notify-Signal senden, sodass jThr vom wait-Status in den ready-Status übergeht. Wie kann er das bewerkstelligen?
Hier die angebotenen Antworten:
a) Execute notify(jThr); statement from the synchronized code of jMoni
b) Execute jMoni.notify(jThr); statement from the synchronized code of any thread
c) Execute jMoni.notify(jThr); statement from the synchronized code of jMoni
d) Execute jMoni.notify(jThr); statement from the code of any thread
e) He cannot specify the thread to be notified.
Richtig soll e) sein und ich will auch gar nicht mal bezweifeln, dass das so ist.
Aber WARUM geht das nicht? Geht das überhaupt nicht oder geht es nur nicht mit den von a) bis d) angebotenen Methoden?
Ich weiß natürlich nicht, wie jMoni.notify() konkret ausschaut - aber würde man ein synchronisiertes jThr.notify() verwenden, würde es doch anders ausschauen? Man kann doch einem Thread-Objekt von einem synchronisierten Code-Block aus ein notify-Signal schicken, indem man thr.notify() aufruft - man braucht halt die Referenz darauf - oder sehe ich das falsch?
Gruß Michi