多线程知识点(3)
volatile作用
volatile可以保证内存可见性且禁止重排序
可以强制线程从公共内存中读取变量的值,而不是从工作内存中读取。
volatile 与 synchronized比较
1)volatile 关键字是线程同步的轻量级实现,所以volatile性能比synchronized更好,volatile只能修饰变量,而synchronized可以修饰方法,代码块。随着JDK新版本的发布,synchronized的执行效率也有了很大的提升。
在开发中我们使用synchronized的比例较大。
2)多线程访问volatile变量不会发生阻塞,而synchronized可能会阻塞。
3)volatile能保证数据的可见性,不能保证原子性。synchronized都可以保证,会数据同步。
4)volatile解决的是变量在多个线程之间的可见性;synchronized解决多个线程之间访问公共资源的同步性。
volatile 非原子特性
volatile 关键字增加了实例变量在多个线程之间的可见性,但是不具备原子性。