class ThreadSafe implements Runnable {
int arr[]=new int[]{1,2,3,4,5};
int sum=0;
public void run() {
int result=sum();
System.out.println("for "+Thread.currentThread().getName()+"the value is"+result);
}
public int sum() {
for(int i=0;i<5;i++) {
sum=sum+arr[i];
System.out.println("calculating sum for thread"+Thread.currentThread().getName()+"sum ="+sum);
try {
Thread.sleep(10);
} catch(Exception e) {}
}
return sum;
}
public static void main(String...d) {
ThreadSafe ts=new ThreadSafe();
ThreadSafe ts1=new ThreadSafe();
Thread t=new Thread(ts);
Thread t1=new Thread(ts1);
t1.start();
t.start();
}
}
合計メソッドが同期されていないため、複数のスレッドが同時に合計メソッドを実行できるため、出力が15にならないことを期待していました。
2つのスレッドがsumメソッドを即座に実行するため、最初のスレッドがsumの値を別のスレッドによって読み取られる値に更新するため、出力が15になることはないはずです。
だから私の質問は、sum()メソッドを同期していないのに、なぜプログラムの出力が期待どおりに出力されるのかということです。