Nein, das ist kein Threadsicher. Foo
ist änderbar. Wenn Sie also sicherstellen möchten, dass verschiedene Threads denselben Wert von bar
sehen - also Konsistenz - entweder:
bar
volatile
oder synchronized
oder AtomicReference<String>
. Die Lese- und Schreibvorgänge von bar
sind selbst atomar, aber Atomizität ist keine Threadsicherheit.
Für eine ausführliche Darstellung der Parallelität von Java sollten Sie sich eine Kopie von Java Concurrency in Practice (JCIP) besorgen .
Sie setzen Verweise, und daher spielt die Unveränderlichkeit von String
keine Rolle. Sie beeinflussen nicht den Inhalt von String
.
Nein, es ist nicht threadsicher.
Solange String
unveränderlich ist, kommt das Problem aus dem Feld Foo
. Um dies deutlicher zu machen, betrachten Sie zum Beispiel eine Methode, deren Aufgabe es wäre, den Wert von bar
zu anhängen (anstatt ihn zu ersetzen). Wenn es von mehreren Threads aufgerufen wird, können einige Schreibvorgänge verloren gehen. Das Gleiche (verlorene Schreibvorgänge) kann auch mit Ihrem einfachen Setter passieren, auch wenn es in diesem Fall zunächst nicht offensichtlich ist.
Tags und Links java thread-safety immutability