yield() Aufruf in einer synchronized-Methode

Jojo_X

Mitglied
Was passiert, wenn man yield() in einer synchronized Methode aufruft. Wechselt der Thread dann in den Zustand "nichtausführbar"? Und was passiert mit der Sperre für die Methode. Kann ein anderer Thread diese synchronized-Methode jetzt ausführen?
 
Was passiert, wenn man yield() in einer synchronized Methode aufruft. Wechselt der Thread dann in den Zustand "nichtausführbar"?
Warum sollte?
Und was passiert mit der Sperre für die Methode. Kann ein anderer Thread diese synchronized-Methode jetzt ausführen?
Nein, dafür ist ja der synchronized Block bzw. die Methode da, dass niemand da zwischen rein pfuschen kann.
Steckt da ein konkretes Problem dahinter?
 
Hi,
Danke für die Antwort. Nein es steckt kein konkretes Problem dahinter, ich habe es nur mal irgendwo gesehen und habe mich gefragt, welchen Sinn ein yield() in einem synchronized-Block hat.
In was für einen Zustand wechselt der Thread nach aufruf von yield()? In den Zustand ausführbar (Also von laufend zu ausführbar)?
 
yield() pausiert den Thread kurzzeitig (wie lange weiss ich nicht, die Methode ist nativ implementiert) Der Thread befindet sich dann im Zustand schlafend.
 
OK, schlafend war vielleicht übertrieben 😳
Er wird unterbrochen, bleibt aber - worauf ich eigentlich hinaus wollte - weiterhin ausführbar und wechselt bei nächster Möglichkeit wieder in den Status laufend.
 
Hi Leute,
Nochmal eine Zusatzfrage zu diesem Thema.
Was passiert wenn ich wait() in einer synchronized Methode ausführe. Können dann andere Threads auf diese synchronized Methode zugreifen?
 
Also was ich gelesen habe ist, dass die Sperre abgegeben wird. Jedoch macht das in meinen Augen nicht so viel Sinn( weil synchronized ist ja dafür da, um Methoden von Objekte zu sperren), deshalb wollte ich mal nachfragen.
 
na eine warum-Frage klingt schon anders als eine ja/ nein-Frage, obwohl auch nachzulesen und an Beispielen verdeutlicht..,

mit wait() wartet man an einem Objekt bis jemand anders notify() aufruf, dafür braucht der andere auch synchronized,
würde der erste die ganze Zeit blockieren könnte nie ein notify() kommen,

mit synchronized belegt man Ressourcen wenn man auch damit arbeitet, wartet man gibt man sie frei damit andere was tun können

> Jedoch macht das in meinen Augen nicht so viel Sinn( weil synchronized ist ja dafür da, um Methoden von Objekte zu sperren)

oder andersrum beschreibe du doch wie du dir das vorstellst,
was passiert wenn man mit synchronized die ganze Zeit blockiert und noch darin wartet?,
warum sollte auf diese Weise gewartet werden, welches Ziel wird verfolgt, wie lange wird gewartet, wann warum aufgehört?

wenn man sich die Standard-Beispiele zu wait + notify wie Producer/ Consumer anschaut sieht man für alles die Gründe und Abläufe
und auch wann was warum synchronized ist, oder besteht dort eine wohlformulierte Detailfrage?
 
Hallo,
Meine letzte Frage zum Thema Threads-Synchronization:
Es geht um die Methode join();
Ich habe mehrfach folgendes gelesen:
"Der aktuell ausgeführte Thread wartet auf den Thread, für den die Methode aufgerufen wird, bis dieser beendet ist"
(Quelle:Galileo Computing :: Java ist auch eine Insel – 14.3 Thread-Eigenschaften und -Zustände)

Mir ist nicht ganz klar, wie diese Aussage zu verstehen ist. Es steht ja, dass der aktuell ausgeführte Thread warten muss, bis der Thread der join() aufgerufen hat, beendet. Aber der Thread der join() aufruft, kann doch nur der aktuell ausgeführte Thread sein, denn sonst könnte der Thread ja nichts aufrufen, da er ja gerade nicht aktiv ist.
 
> Es steht ja, dass der aktuell ausgeführte Thread warten muss, bis der Thread der join() aufgerufen hat, beendet.

nein das steht da nicht, da steht dass der aktuell ausgeführte Thread warten muss, bis der Thread, AN DEM join() aufgerufen wird, sich beendet,

denn dieser andere Thread arbeitet ja unabhängig davon was der aktuell ausgeführte Thread macht,
übrigens wird dieses Warten genau mit Synchronisation, wait + notify gemacht wenn ich mich recht erinnere,
kann man im Quellcode nachlesen, sind reine bekannte Java-Befehle, nix internes
 
Aber der Thread AN DEM join() aufgerufen wird, ist doch der aktuel ausgeführte Thread.
Heißt dass, dass alle Threads warten müssen, bis der Thread, join() aufruft beendet ist
 
nein, ein Thread A ruft die Methode an einem anderen Thread B auf,
B merkt das gar nicht, A wartet nun, und alle anderen Thread sind davon nicht betroffen,
falls sie nicht auch auf A warten oder ähnliche Späße
 

Neue Themen


Zurück
Oben