は私の次のコードです:スレッドが正しく動作しない理由ここで
class Test {
private int x = 0;
public void incX() {
synchronized(this) {
++x;
}
System.out.println("x is: "+x+" "+Thread.currentThread().getName());
}
public static void main(String[] args) {
Test test = new Test();
Thread t1 = new Thread(() -> {
test.incX();
});
Thread t2 = new Thread(() -> {
test.incX();
});
t1.start();
t2.start();
System.out.println("Done");
}
}
ここに私の出力です:そして、ここで
x is: 2 Thread-1
x is: 1 Thread-0
スレッドt2
出力2が、t1
も出力すべき2、右のスレッド? x
が2のときと同様に、t1
のスレッドに表示されるはずです。だからなぜt1
スレッドが1ですか?
スレッドt2
が2を出力し、スレッドt1
が1を出力するのはどうでしょうか?スレッドt2
はすでに2を出力しているので、xの値は2になります。したがって、スレッドt1
はどのようにして1を出力できますか?私は誤解していますか?
出力します。 – duffymo
@duffymo:私が誤解していることを教えていただけますか? –
他はより良い仕事をしています。コードがあなたの期待に合っていないときは、あなたの前提を確認するのが最善であると言うことを除いて、私が追加するものはありません。 – duffymo