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

浙公网安备 33010602011771号