第280天学习打卡(知识点回顾 volatile和synchronized的区别)
volatile 和synchronized的区别
-
-
volatile仅能使用在变量级别;synchronized则可以使用在变量、方法和类级别
-
volatile仅能使用在变量的修改可见性,不保证原子性;synchronized可以使用在变量、方法和类级别
-
volatile不会造成线程阻塞;synchronized可能会造成线程阻塞
-
volatile 标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
-
仅使用volatile并不能保证线程安全;synchronized则可以实现线程的安全性,因为线程的安全取决于原子性和可见性
volatile:是java虚拟机提供的轻量级的同步机制
-
保证可见性
-
不保证原子性(就有可能出现写丢失的情况)
-
禁止指令重排
synchronized 是关键字属于jvm层面
-
不需要用户手动释放锁
-
不可中断
-
非公平
-
不可以绑定多个条件Condition
-
是可重入锁