java volatile关键字

来源:互联网 发布:手机midi键盘软件 编辑:程序博客网 时间:2024/06/01 09:16
volatile关键字是java用来解决可见性和有序性问题的。好多人认为volatilehe和synchronized一样,皆是使修饰的对象在操作的时候具有原子性。其实不然,volatile修饰的变量的单次读/写可以保证原子性。如longdouble类型的变量,但是并不能保证i++和++i这种操作的原子性,为什么呢?因为本质上i++/++i是读写两次操作。要想保证操作的原子性可以通过AtomicInteger/Synchronized关键字。

volatile原理

1.可见性在多线程执行过程中,线程本身并不和主内存进行数据交互,而是通过线程的工作内存完成相应操作。这也是导致线程间数据不可见的本质原因。volatile修饰的变量和普通变量的写操作主要有一下区别:{1}volatile修饰的变量在修改后会强制将修改后的值刷新到主内存中。{2}修改volatile修饰的变量后会导致其他线程工作内存中对应的变量值失效。因此再读取该变量值的时候就需要重新从组内存中读取。2.有序性实现3.内存屏障

但是自从jdk1.6之后synchronized的性能做了重大改善,volatile逐渐的退出了历史舞台。

参考:http://www.cnblogs.com/paddix/p/5428507.html

原创粉丝点击