Diese fließend wie Klasse ist nicht streng unveränderlich, weil die Felder nicht endgültig sind, aber ist es Thread sicher, und warum?
Das Problem mit der Threadsicherheit, das mich beschäftigt, ist nicht die Race Condition, sondern die Sichtbarkeit der Variablen. Ich weiß, dass es einen Workaround gibt, der finale Variablen und einen Konstruktor anstelle von clone() + Zuweisung verwendet. Ich möchte nur wissen, ob dieses Beispiel eine brauchbare Alternative ist.
public class IsItSafe implements Cloneable {
private int foo;
private int bar;
public IsItSafe foo(int foo) {
IsItSafe clone = clone();
clone.foo = foo;
return clone;
}
public IsItSafe bar(int bar) {
IsItSafe clone = clone();
clone.bar = bar;
return clone;
}
public int getFoo() {
return foo;
}
public int getBar() {
return bar;
}
protected IsItSafe clone() {
try {
return (IsItSafe) super.clone();
} catch (CloneNotSupportedException e) {
throw new Error(e);
}
}
}