Ich frage mich, warum das Ergebnis nicht 400 000 ist. Es gibt zwei Threads, warum wird es blockiert?Java Threading Problem?
class IntCell {
private int n = 0;
public int getN() {return n;}
public void setN(int n) {this.n = n;}
}
class Count extends Thread {
private static IntCell n = new IntCell();
@Override public void run() {
int temp;
for (int i = 0; i < 200000; i++) {
temp = n.getN();
n.setN(temp + 1);
}
}
public static void main(String[] args) {
Count p = new Count();
Count q = new Count();
p.start();
q.start();
try { p.join(); q.join(); }
catch (InterruptedException e) { }
System.out.println("The value of n is " + n.getN());
}
}
Warum gibt es so ein Problem damit?
Was meinst du mit "warum wird es blockiert"? Was ist falsch - stellen Sie sich vor, wenn beide Threads einen bestimmten Wert (sagen wir 100), dann beide inkrementieren (bis 101), dann speichern Sie den Wert. Es sind zwei Inkremente aufgetreten, aber das Ergebnis ist 101 anstelle von 102 ... –
Vielleicht möchten Sie die Ergebnisse hinzufügen, die Sie erhalten. Zu Ihrer Information: Dies ist eine grundlegende Sache, die Sie mit Threading und gleichzeitiger Aktualisierung von Werten verstehen müssen. –
Ich schlage vor, Sie gehen und lesen, wie Multi-Threading funktioniert. Ihre Frage beinhaltet ein ernsthaftes Missverständnis. Multi-threading ist so schwierig, richtig zu machen, dass Sie ein gutes Verständnis haben müssen, bevor Sie beginnen. – davmac