volatile关键字代替不了synchronized关键字,不过在某些场合可以作为替代方案。
-
volatile关键字只能修饰字段,而synchronized只能修饰代码块和方法。
-
synchronized关键字需要获得锁释放锁,volatile关键字不需要。
3.synchronized代码块或方法在等待锁的时候会被阻塞;volatile不是这样的。
-
synchronized代码块或方法会比volatile关键字更影响性能。
-
volatile关键只同步被修饰的变量,而synchronized关键字却同步代码块或方法中所有的变量,并且还会获得锁释放锁,所以synchronized的负载更大。
-
不能同步(synchronized)null对象,而volatile变量可以是null的。
-
读取volatile变量效果等同获取锁,写入volatile变量效果等同释放锁。