12.3 Java内存模型
12.3.3 对于volatile型变量的特殊规则
代码清单12-1, volatile变量自增运算测试
/*
* 代码清单12-1, volatile变量自增运算测试
*/
package cn.chapter12;
public class VolatileTest {
public static volatile int race = 0;
public static void increase(){
race++;
}
public static final int THREADS_COUNT = 20;
public static void main(String[] args) {
Thread [] threads = new Thread[THREADS_COUNT];
for(int i = 0;i<THREADS_COUNT;i++){
threads[i] = new Thread(new Runnable(){
@Override
public void run(){
for(int i = 0;i<10000;i++)
increase();
}
});
threads[i].start();
}
//等待所有累加线程都结束
while(Thread.activeCount()>1)
Thread.yield();
System.out.println(race);
}
}
运行结果:
53189
代码清单12-2 , VolatileTest的字节码
public static void increase();
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: getstatic #13 // Field race:I
3: iconst_1
4: iadd
5: putstatic #13 // Field race:I
8: return
LineNumberTable:
line 11: 0
line 12: 8