public class MyThread
{
volatile static int i;
public static class myT extends Thread
{
public void run ()
{
int j = 0;
while(j<1000000){
i++;
j++;
}
}
}
public static void main (String[] argv)
throws InterruptedException{
i = 0;
Thread my1 = new myT();
Thread my2 = new myT();
my1.start();
my2.start();
my1.join();
my2.join();
System.out.println("i = "+i);
}
}
volatile は事前発生関係を構築するため、i の最終値は厳密に 2000000 である必要があります。ただし、実際の結果は、変数 i に volatile がない場合と何ら変わりはありません。ここで機能しない理由を説明できる人はいますか? i は volatile と宣言されているため、メモリの不整合から保護する必要があります。