Volatile
是Java
的一个关键字,被Volatile
所修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。
Volatile
不会让线程阻塞,响应速度比synchronized
快。
特性
Volatile
具有可见性、有序性,但不具备原子性。为了更好的理解,下面先分别介绍下这三种特性:
- 原子性:指多个操作不存在只执行一部分的情况,如果全部执行完成那么就没什么问题,但是如果只执行了一部分,那么之前所做的都需要进行撤销。(例如事务)
-
可见性:当多个线程访问同一个变量
x
时,线程1
修改了变量x
的值,线程2
、线程3
...能够立刻读取到线程1
修改后的值。 - 有序性:即程序执行时按照代码书写的先后顺序执行。
适用场景
- 适用于对变量的写操作不依赖于当前值,对变量的读取操作不依赖于非
volatile
变量。 - 适用于读多写少的场景。
- 可用作状态标志。
网友评论