Multithreading ist nicht nur über Rennbedingungen es geht auch um die Sichtbarkeit Speicher formuliert durch
jsr-133 was du unbedingt lernen musst, wenn du Nebenläufigkeit in Java verstehen willst.
Es gibt wahrscheinlich viele Möglichkeiten, in denen Sie Ihren Code brechen kann, ein offensichtliches Beispiel ist, wenn Sie Ihr Objekt in Thread eine Änderung x in Thread B und y in Faden C schaffen Sie nie jene Änderungen Thema A. sehen könnte
machen x und y flüchtigen
class A {
volatile Integer x;
volatile String y;
}
Dadurch wird sichergestellt, dass alle Threads sehen Änderungen an x und y
A a = new A();
a.x = 0;
Thread t1 = new Thread(() -> {
while (true) {
a.x = 1;
}
});
Thread t2 = new Thread(() -> {
a.y = "a";
});
t1.start();
t2.start();
while(a.x == 0) {
}
System.out.println("might never get here");
Eine mögliche Lösung ist:
zu Einige Code zu illustrieren Sie müssen jedoch sicherstellen, dass die Instanz von A sicher veröffentlicht wird.
Warum brauchen Sie dann ein einzelnes Objekt? Übergeben Sie verschiedene Objekte an verschiedene Threads –
Ja, es gibt viele Szenarien, in denen dies brechen kann. Sie müssen lesen http://jcip.net/ – Oleg
Welchen Thread _reading_ die Daten? –