synchronized和volatile关键字的比较

volatile关键字代替不了synchronized关键字,不过在某些场合可以作为替代方案。

  1. volatile关键字只能修饰字段,而synchronized只能修饰代码块和方法。

  2. synchronized关键字需要获得锁释放锁,volatile关键字不需要。

3.synchronized代码块或方法在等待锁的时候会被阻塞;volatile不是这样的。

  1. synchronized代码块或方法会比volatile关键字更影响性能。

  2. volatile关键只同步被修饰的变量,而synchronized关键字却同步代码块或方法中所有的变量,并且还会获得锁释放锁,所以synchronized的负载更大。

  3. 不能同步(synchronized)null对象,而volatile变量可以是null的。

  4. 读取volatile变量效果等同获取锁,写入volatile变量效果等同释放锁。

猜你喜欢

转载自blog.csdn.net/weixin_43274962/article/details/82836837