代码改变世界

volatile关键字

2017-05-08 19:59  fengna  阅读(139)  评论(0编辑  收藏  举报

volatile关键字:

1. 作用:是使变量在多线程间是可见(即可见性),而sychronized关键字实现可见性与原子性(同步性);强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。

2. 关键字sychronized与关键字volatile比较:

(1)关键字volatile是线程同步的轻量级实现,只修饰于变量,而sychronized可以修饰方法、以及代码块;

(2)多线程访问volatile不会发生阻塞,而sychronized会出现阻塞;

(3)volatile能保证数据的可见性,强制从公共堆栈中取得变量的值,但是不能保证原子性;而sychronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存与公共内存中的数据进行同步;

(4)volatile解决的是变量在多线程之间的可见性;而sychronized是解决多线程之间访问资源的同步性。

3. 线程安全主要考虑原子性与可见性。