volatile变量的运算在并发下一样是不安全的

来源:互联网 发布:北京匡恩网络上市 编辑:程序博客网 时间:2024/04/29 23:26

下面是一段volatile变量自增元算测试:

/** * @title VolatileTest.java * @description volatile变量自增运算测试 * @date 2014-02-28 11:48 * @author lichunan * @version 1.0 */public class VolatileTest {public static volatile int race = 0;public static void increase() {race++;}private 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() {@Overridepublic void run() {for(int i=0; i < 10000; i++){increase();}}});threads[i].start();}// 等待所有累加线程都结束while(Thread.activeCount() > 1){Thread.yield();}System.out.println(race);}}
这段代码发起了20个线程,每个线程对race变量进行10000次自增操作,如果这段代码能够正确并发的话,最后输出的结果应该是200000。但实际是每次输出的结果都不一样。

原因如下:


0 0
原创粉丝点击