在一些场景中,volatile关键字和synchronized关键字均可以避免线程安全问题,经常有面试题考察两者的区别。
两者的主要区别如下:
原理不同:volatile保证的是共享数据的可见性,synchronized是通过设置临界区实现线程的互斥
用法不同:volatile用于修饰变量,synchronized用于修饰代码块和方法
功能不同:volatile仅能实现变量修改的可见性,不能保证原子性;synchronized即可保证变量修改的可见性,也能保证原子性
消耗不同:volatile不会造成线程阻塞,synchronized可能造成线程的阻塞
可以简单总结为:volatile比synchronized更为轻量级,synchronized比volatile的功能更强。