1.volatile 原理
1.1 volatile是轻量级的synchronied,因为它不会引起上下午切换和调度,所以它的使用成本相对更低。
1.2缓存一致性:当对某个volatile修饰的变量进行写操作时,将数据写入内存,同时通知所有cpu的缓存行数据失效,当其他cpu读该缓存行数据时,发现数据失效,则从内存中读取,保持数据一致性,盗用网上一张图,如下:
1.3 volatile作用
1.3.1 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的;禁止进行指令重排序
1.3.2 可见性只能保证每次读取的是最新的值,但是volatile没办法保证对变量的操作的原子性
1.3.3 volatile关键字能禁止指令重排序,所以volatile能在一定程度上保证有序性
1.3.4 synchronized关键字是防止多个线程同时执行一段代码,那么就会很影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性