synchronized、volatile和lock

特性 synchronized volatile
原子性 true false
可见性 true true
是否阻塞线程 true false
使用级别 变量、方法、类 变量
用途 锁定当前变量,只有当前线程能够访问该变量,其余线程被阻塞住 告诉jvm当前变量在寄存器(工做内存)中的值是不肯定的,须要从主存中读取
使用范围 a、对变量的写操做不依赖于当前值。b、该变量没有包含在具备其余变量的不变式中。

synchronized和lock区别
锁机制:synchronized、Lock、Conditionjvm

特性 synchronized ReentrantLock
是否须要手动释放 false true
等待中的线程是否能够中断等待 false true
是否能够主动得到锁 false true(投票等方式)
是否支持定时 false true
其余 synchronized是在JVM层面上实现的(语言级别)JVM会自动释放锁定 lock是经过代码实现的,要保证锁定必定会被释放,就必须将unLock()放到finally{}中
相关文章
相关标签/搜索