volatile原理和使用

Volatile实现轻量级的同步锁,原理:

1. 禁止指令重排。

2. 多线程可见性。

java 语言提供了一种稍弱的同步机制,Volatile可以看做是轻量级的 Synchronized,即volatile变量,用来将变量的更新操作通知到其他线程,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。需要注意的是,像一些a ++ 等非原子性操作,Volatile是无法保证线程安全的。

volatile的应用场景:synchronized关键字是防止多个线程同时执行一段代码,那么就会很影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。

通常来说,使用volatile必须具备以下2个条件:1. 对变量的写操作不依赖于当前值 2.该变量没有包含在具有其他变量的不变式中

并发编程三大概念:原子性, 可见性,有序性

你可能感兴趣的:(volatile原理和使用)