1.问题

这里有相关详细问答。
volatile 和 synchronized 关键字区别
volatile 和 synchronized 关键字区别

volatile 和 synchronized 关键字区别
volatile 和 synchronized 关键字区别

2.己见

  1. volatile:被多个对象访问的成员变量,但对于该成员变量访问的方式不是“非原子操作”,答主所谓的“复合原子操作”。就是说,在成员变量的访问方式是原子操作时,只用volatile即可。如果多线程情况下,且访问方式非原子操作,即使使用了volatile关键字也不能保证线程安全。
  2. synchronized:对于多线程访问的共享对象问题,非原子访问操作时可以通过synchronized关键字解决。同时,synchronized关键字是volatile关键字所提供功能的父集,所以,如果对某个成员变量的访问用了synchronized就不必再用volatile了。
  3. 利弊和取舍:对于volatile关键字所完成的功能,synchronized关键字都可以解决;但反之不成立。
  • volatile关键字相比于synchronized关键字更倾向于产生更少的错误。比如在获取对象锁的时候阻塞、死锁等问题。
  • 性能上:volatile将产生更大的吞吐量和更小的延迟。

相关文章: