为了账号安全,请及时绑定邮箱和手机立即绑定

针对volatile的解决方法?

针对volatile的解决方法?

长风秋雁 2019-03-28 19:15:23
package basic;public class TestVolatile {    public volatile static int count = 0;    public static void increase() {        try {            // 延迟10毫秒,使得结果明显            Thread.sleep(10);            count++;        } catch (InterruptedException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        for (int i = 0; i < 10000; i++) {            new Thread(new Runnable() {                @Override                public void run() {                    TestVolatile.increase();                }            }).start();        }        System.out.println("期望运行结果:10000");        System.out.println("实际运行结果:" + TestVolatile.count);    }}代码如下,由于volatile的read and load操作并不是原子性的,它只保证了从主内存读到栈内存的值是最新的,因此上述代码运行结果并不是语气的10000。问题:1.既然volatile并没有保证原子性,为什么还要使用它?2.JDK中针对volatile的这种弊端,还做了哪些设计来弥补这一缺憾?
查看完整描述

4 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

你需要的是【锁】。


查看完整回答
反对 回复 2019-04-20
  • 4 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号