一、使用上的区别
volatile只能修饰实例变量和类变量
synchronized关键字不能修饰变量,只能修饰方法和代码块
volatile修饰的变量可以为空,同步块的monitor不能为空。
二、对原子性的保证
volatile无法保证原子性
synchronized可以保证原子性,因为无法被打断
三、对可见性的保证
都可以实现共享资源的可见性,虽然实现的方式不同
四、对有序性的保证
volatile关键字禁止JVM编译器及处理器对其重排序,能保证有序性
synchronized保证顺序性是串行化的结果,但同步块里的语句是会发生指令从排
五、线程阻塞
volatile不会使线程陷入阻塞
synchronized会使线程陷入阻塞
synchronized和volatile关键字区别
最新推荐文章于 2024-07-12 15:51:39 发布