volatile底层实现原理 volatile关键字在Java中有什么作用?
volatile关键字在Java中有什么作用?
volatile是防止指令重排序来保证可见性
对于JVM层面是防止编译器的重排序
同时,对于有些cpu来说,他们会通过缓存锁或者中线索来解决缓存可见性
但是,目前很多cpu都做了优化,因为缓存一致性MESI会带来性能开销,所以用到了storebuffer机制来做异步处理,而这种机制带来了指令的乱序执行。从而导致可见性问题。
那么volatile会在cpu层面会增加内存屏障,来解决cpu的乱序执行带来的可见性问题
synchronize具有可见性吗?
volatile是线程同步的轻量级实现,所以volatile的性能要比synchronize好;volatile只能用于修饰变量,synchronize可以用于修饰方法、代码块。随着jdk技术的发展,synchronize在执行效率上会得到较大提升,所以synchronize在项目过程中还是较为常见的;
2.多线程访问volatile不会发生阻塞;而synchronize会发生阻塞;
3.volatile能保证变量在私有内存和主内存间的同步,但不能保证变量的原子性;synchronize可以保证变量原子性;
4.volatile是变量在多线程之间的可见性;synchronize是多线程之间访问资源的同步性;
对于volatile修饰的变量,可以解决变量读时可见性问题,无法保证原子性。对于多线程访问同一个实例变量还是需要加锁同步。
volatile底层实现原理 volatile实现原理 c语言volatile的作用
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。