java中volatile的作用 volatile关键字在Java中有什么作用?
volatile关键字在Java中有什么作用?
Volatile是为了防止指令重排序以确保可见性
对于JVM级别,它是为了防止编译器重排序
同时,对于某些CPU,它们会通过缓存锁或线程来解决缓存可见性
但是,目前很多CPU已经过优化,因为缓存一致性MESI会带来性能开销,因此使用storebuffer机制来进行异步处理,而这种机制会导致指令的无序执行。这会导致可见性问题。
然后volatile将在CPU级别增加内存屏障,以解决由CPU无序执行引起的可见性问题
1。Volatile是线程同步的轻量级实现,因此Volatile的性能优于synchronize;Volatile只能用来修改变量,synchronize可以用来修改方法和代码块。随着JDK技术的发展,同步在执行效率上会有很大的提高,所以同步在项目的过程中还是比较普遍的。对volatile的多线程访问将不会阻塞;而同步将阻塞;
3。Volatile可以保证私有内存和主内存之间变量的同步,但不能保证变量的原子性;同步可以保证变量的原子性;
4。Volatile是多线程间变量的可见性;synchronize是多线程间访问资源的同步;对于Volatile修改的变量,可以解决读取时变量的可见性问题,但不能保证原子性。对于多线程访问同一实例变量,需要锁同步。
java中volatile的作用 volatile关键字的应用场景 volatile关键字原理
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。