volatile关键字:
1. 作用:是使变量在多线程间是可见(即可见性),而sychronized关键字实现可见性与原子性(同步性);强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。
2. 关键字sychronized与关键字volatile比较:
(1)关键字volatile是线程同步的轻量级实现,只修饰于变量,而sychronized可以修饰方法、以及代码块;
(2)多线程访问volatile不会发生阻塞,而sychronized会出现阻塞;
(3)volatile能保证数据的可见性,强制从公共堆栈中取得变量的值,但是不能保证原子性;而sychronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存与公共内存中的数据进行同步;
(4)volatile解决的是变量在多线程之间的可见性;而sychronized是解决多线程之间访问资源的同步性。
3. 线程安全主要考虑原子性与可见性。