Synchronized和Volatile是并发中的两大关键字,有相似性和不同点。
Synchronized更详细介绍参考https://www.cnblogs.com/spark-cc/p/17069585.html
volatile简单来说就是轻量的同步手段,与Synchronized不同的,volatile不会触发上下文切换,它的并发语义也很简单,保证了JMM的可见性和有序性,注意不保证原子性,而Synchronized比较牛,JMM三种特性都能保证,当然,volatile的运用场景也不多,一般用在变量上,告诉编译器这个变量对全部线程是可见的,或者是变量充当触发器,告诉编译器volatile作用变量周围的代码不能重排序优化。
而Synchronized运行场景就比较多了,还可以细分为对象锁和类锁,作用于变量或者函数,甚至类文件