volatile确保将变量的更新操作通知到其他线程。
volatile变量具备两种特性:
由于访问volatile变量时不会执行加锁操作,也就不会执行线程阻塞。所以volatile变量是一种比synchronized关键字更轻量级的同步机制
volatile使用时必须满足的2个条件
volatile使用实例
volatile boolean flag = false;
volatile与Synchronized关键字比较
synchronized | volatile | |
---|---|---|
谁更轻量 | √ | |
可修饰对象 | 成员变量与非静态方法、静态方法、代码块 | 变量 |
原子性 | 锁的互斥执行的特性可以确保对整个临界区代码执行具有原子性 | volatile对任意单个变量的读/写具有原子性,但是类似于i++这种复合操作不具有原子性 |
多线程访问 | 会阻塞 | 不会阻塞 |
synchronize是多线程之间访问资源的同步性 | volatile是变量在多线程之间的可见性 |