Ich frage mich, ob es möglich ist, das verlorene Update-Problem zu vermeiden, bei dem mehrere Threads dasselbe Datum aktualisieren, während die Verwendung von synchronized(x) { }
vermieden wird.Vermeidung eines verlorenen Updates in Java ohne direkte Verwendung der Synchronisation
Ich werde zahlreiche tun fügt und Schritten:
val++;
ary[x] += y;
ary[z]++;
Ich weiß nicht, wie Java, diese in Bytecode kompiliert und wenn ein Thread in der Mitte eines dieser Aussagen Blöcke Byte unterbrochen werden könnte, Code. Mit anderen Worten, sind diese Aussagen sicher?
Auch ich weiß, dass die Vector-Klasse synchronisiert ist, aber ich bin mir nicht sicher, was das bedeutet. Wird der folgende Code threadsicher sein, so ändert sich der Wert an Position i
nicht zwischen vec.get(i)
und vec.set(...)
.
class myClass {
Vector<Integer> vec = new Vector<>(Integer);
public void someMethod() {
for (int i=0; i < vec.size(); i++)
vec.set(i, vec.get(i) + value);
}
}
Vielen Dank im Voraus.
Ich hatte keine Ahnung java.util.concurrent.atomic existierte, danke! – nash
Es ist ein bisschen auf der Low-Level-Seite. java.util.concurrent ist auf einer allgemein nützlicheren Ebene. –