Bedeutung Synchronized:
Man kann mit Synchronize einen speziellen Bereich bzw. spezielle Methode sperren.
Dies gilt aber immer nur für ein Objekt??? Mehrere Objekte können die selbe Synchronized Methode gleichzeitig aufrufen?
Wenn ein Thread in einer Synchronized Methode ist kann kein anderer Thread diese Methode betreten.
Unterschied join / synchronized
synchronized sperrt nur einen Bereich, die anderen Threads laufen aber weiter.
Wenn ich jedoch threadname.join() mache, dann werden alle anderen Threads angehalten, egal wo sie sind bis der Threadname mit der join() Methode fertig ist.
wait / notify
ruft ein Thread die methode wait() auf, geht er in einen wartezustand bis ein anderer Thread die Methode notify() aufruft.
Hier muss man sicherstellen, dass sich nicht beide Threads gleichzeitig in der wait() Methode befinden, dies kann man zusätzlich durch synchronize machen.
yield()
threadnamel.yield()
Hier is der Thread so liebevoll und gibt die vergebene CPU-Zeit einem anderen Thread und reiht sich wieder in die Warteschlange hinten ein.
Habe mir etwas über Threads durchgelesen und es so verstanden.
Ist das korrekt?
Bedeutung Synchronized:
Man kann mit Synchronize einen speziellen Bereich bzw. spezielle Methode sperren.
Dies gilt aber immer nur für ein Objekt??? Mehrere Objekte können die selbe Synchronized Methode gleichzeitig aufrufen?
Wenn ein Thread in einer Synchronized Methode ist kann kein anderer Thread diese Methode betreten.
Das hängt von der konkreten Implementierung der Methode ab. Es gibt sowohl Object-level locks (also der Lock gilt nur für das Objekt), als auch Class-level locks (der Lock gilt also für die ganze Klasse und nicht nur ein Objekt).
Unterschied join / synchronized
Wenn ich jedoch threadname.join() mache, dann werden alle anderen Threads angehalten, egal wo sie sind bis der Threadname mit der join() Methode fertig ist.
yield()
threadnamel.yield()
Hier is der Thread so liebevoll und gibt die vergebene CPU-Zeit einem anderen Thread und reiht sich wieder in die Warteschlange hinten ein.
Die Methode `Thread.join()` und das `synchronized` Schlüsselwort bedeuten doch total unterschiedliche Dinge.
Thread.join(): Der aufrufende Thread wartet solange, bis der Thread, auf dessen Thread-Objekt join() aufgerufen wurde, beendet ist.
synchronized Schlüsselwort an einer Instanzmethode: Der Thread, welcher die mit synchronized markierte Methode auf einem Objekt `O` aufruft, wartet mit der Methodenausführung, falls gerade ein anderer Thread diese Methode auf demselben Objekt `O` ausführt (bzw. sich gerade in der Ausführung befindet).
Naja, join wartet bis ein Thread komplett "tot" ist. Und synchronized wartet nur, bis ein anderer Thread einen gewissen synchronisierten Block verlassen hat.