Volatile实现轻量级的同步锁,原理:
1. 禁止指令重排。
2. 多线程可见性。
java 语言提供了一种稍弱的同步机制,Volatile可以看做是轻量级的 Synchronized,即volatile变量,用来将变量的更新操作通知到其他线程,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。需要注意的是,像一些a ++ 等非原子性操作,Volatile是无法保证线程安全的。
volatile的应用场景:synchronized关键字是防止多个线程同时执行一段代码,那么就会很影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。
通常来说,使用volatile必须具备以下2个条件:1. 对变量的写操作不依赖于当前值 2.该变量没有包含在具有其他变量的不变式中
并发编程三大概念:原子性, 可见性,有序性
网友评论