Java 中什么是volatile 无法满足原子性的原因?
"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"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。