volatile修飾子を実験してみたのですが、
以下のコードを実行すると、毎回必ず[1000]が出力される事を期待しているのに
何回か実行を繰り返していると、1000未満の数値が出力されます。
これは何故でしょうか?環境はjava1.5.0_5です

public class ThreadTest {
static volatile int c;
public static void main(String[] args) throws Exception {
Thread t0 = new MyThread();
//この間にt1〜t8もnewする
Thread t9 = new MyThread();

t0.start();
//この間にt1からt8もstart()する
t9.start();

t0.join();
//この間にt1からt8もjoin()する
t9.join();

System.out.println("[" + c + "]");
}
}
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++){ThreadTest.c++;}
}
}