synchronized、volatile和lock

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

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

特性 synchronized ReentrantLock
是否需要手动释放 false true
等待中的线程是否可以中断等待 false true
是否可以主动获得锁 false true(投票等方式)
是否支持定时 false true
其他 synchronized是在JVM层面上实现的(语言级别)JVM会自动释放锁定 lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
posted @ 2016-06-01 15:47  李泽波呵呵  阅读(225)  评论(0编辑  收藏  举报