首页 > 其他 > 详细

程序员谈话系例——今天我们来谈一下volatile关键字

时间:2020-03-02 18:54:38      阅读:66      评论:0      收藏:0      [点我收藏+]

 一,Java内存模型于volatile关键字的关系

在JDK1.2之前,Java内存模型实现总是从主存读取变量,在到了现在线程可以把变量保存在本地内存中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,其他线程还继续从寄存器当中读取变量值的拷贝,从而造成了变量不一致的情况。那就需要把变量声明成volatile,这就指示JVM这个变量是不稳定的,每次使用它都要到主存中进行读取。也就是保证了变量的可见性防止指令重排。

二,谈一下volatile和synchronized的区别

1.volatile关键字是线程同步的轻量级实现,所以性能上会比synchronized好得多,但是前者只能作用于变量,而sychronized可以修饰方法和代码块。实际场所下还是synchronized用的比较多一点。

2.多线程访问volatile不会造成阻塞,而synchronized会导致阻塞。

3.volatile关键字能够保证数据的可见性,但是不能保证数据的原子性,而sychronized关键字两者都能保证。

4.volatile关键字主要用于解决变量在多个线程之间的可见性,而sychronzed关键字解决的是多个线程之间访问资源的同步性。

程序员谈话系例——今天我们来谈一下volatile关键字

原文:https://www.cnblogs.com/ffdsj/p/12396917.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!