私は以下のコードを持っています。サンプル実行にJavaスレッドオブジェクトの操作が反映され、どのように?
public class Test implements Runnable
{
static int id = 0;
int value = 0;
public static int getId() {
return ++id;
}
public static void main(String[] args)
{
Test t = new Test();
t.value = 10;
new Thread(t, "child " + getId()).start();
new Thread(t, "child " + getId()).start();
t.value = 20;
new Thread(t, "child " + getId()).start();
new Thread(t, "child " + getId()).start();
}
@Override
public void run() {
System.out.println("Thread " + Thread.currentThread().getName() + " started");
System.out.println(Thread.currentThread().getName() + " Data - " + this.value);
}
}
出力:
Thread child 1 started
Thread child 2 started
child 2 Data - 20
child 1 Data - 20
Thread child 3 started
child 3 Data - 20
Thread child 4 started
child 4 Data - 20
私は、スレッドオブジェクトの(テスト)最新のデータがすべてのスレッドに反映されて見ることができました。しかしどうですか?
私は、t.value=20
行の前に開始され、実行されたスレッドがデータ値 '10'を持つことを期待しています。私が間違っている?