volatile与synchronized介绍
volatile是变量修饰符,其修饰的变量具有可见性(可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到物理内存,当有其他线程需要读取时,可以立即获取修改之后的值)。volatile修饰符的变量则是直接读写物理内存。
volatile可以禁止进行指令重排,保证有序性。程序执行到volatile变量的读操作或者写操作时,在其前面的语句中,更改操作肯定已经完成,且结果已经对后面的操作可见。
synchronized则作用于一段代码或方法,使用了该修饰符既可以保证可见性(通过synchronized和Lock也能够保证可见性)也能够保证原子性(原子性表现在要么不执行,要么执行到底)。
总结
(1)volatile虽然具有可见性但是并不能保证原子性。
(2)synchronized关键字是防止多个线程同时执行一段代码,那么就会影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。