特性 | 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{}中 |