开发者社区> 问答> 正文

Java 中什么是volatile 无法满足原子性的原因?

Java 中什么是volatile 无法满足原子性的原因?

展开
收起
vncamyi27xznk 2021-11-12 16:28:46 450 0
1 条回答
写回答
取消 提交回答
  • "public class Test{ public volatile int inc = 0; public void increase() { inc++; } public static void main(String[] args) { final Test test = new Test(); for(int i=0;i<10;i++){ new Thread(){ public void run() { for(int j=0;j<1000;j++) test.increase(); }; }.start();} while(Thread.activeCount()>1) //保证前面的线程都执行完 Thread.yield();"public class Test{ public volatile int inc = 0; public void increase() { inc++; } public static void main(String[] args) { final Test test = new Test(); for(int i=0;i<10;i++){ new Thread(){ public void run() { for(int j=0;j<1000;j++) test.increase(); }; }.start();} while(Thread.activeCount()>1) //保证前面的线程都执行完 Thread.yield(); System.out.println(test.inc); } }

    以上代码比较简单,就是创建 10 个线程,然后分别执行 1000 次 i++操作。正常情况下,程序的输出结果应该是 10000,但是,多次执行的结果都小于 10000。这其实就是 volatile 无法满足原子性的原因。 这本电子书收录于开发者藏经阁,下载链接:https://developer.aliyun.com/topic/download?id=923"

    2021-11-12 21:06:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载