こんにちは、私は、コードの下に実行しようとしていますし、出力で混乱してスレッドのJavaでの出力を期待取得するにはB:7は静的VAR
静的な値が8に変更された後、Bスレッドが実行されてその値7を印刷しようとしている可能性があります。私は意味する私は静的変数ですし、それのコピーは1つだけです。 i++
3などの異なる操作の
public class ThreadStaticTest implements Runnable {
static int i = 5;
public static void main(String[] args) {
ThreadStaticTest obj = new ThreadStaticTest();
Thread t1 = new Thread(obj);
Thread t2 = new Thread(obj);
Thread t3 = new Thread(obj);
t1.setName("A");
t2.setName("B");
t3.setName("C");
t1.start();
t2.start();
t3.start();
}
@Override
public void run() {
i++;
System.out.println(Thread.currentThread().getName()+" : "+i);
}
}
「i」のコピーは1つだけだと思いますか? 'i ++'は 'i'をコピーし、インクリメントして書き戻します。これはアトミックな操作ではありません。 – dhke
また、スレッドAはiを7と読み、印刷する文字列を生成し、スレッドBはそれをインクリメントして8を出力し、スレッドAはその文字列を出力することができる。 –
@dhke:ここでの実行は )Aが実行を開始した> i ++>インクリメントされた値が6になるように到達しました。 2)Bが実行を開始しました> i ++をインクリメントして7に設定しました。 3)A値を出力7 4) i ++>値を8に増やして>値8を印刷します。 5)今度はBの印刷開始値がまだ7です! –