【发布时间】:2013-04-23 18:55:21
【问题描述】:
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 建立了happens-before关系,所以 i 的最终值严格来说应该是 2000000。但是,实际结果与变量 i 没有 volatile 没有什么不同。谁能解释为什么它在这里不起作用?由于 i 被声明为 volatile,因此应保护它免受内存不一致的影响。
【问题讨论】:
标签: java concurrency volatile