不同于 synchronize关键字 ,从 1.5开始 lock是jdk提供给我们的api
Lock 锁:
lock 和 synchronize的区别:
- 前者通过开发者调用代码手工获取,后者通过jvm自动获取
- 前者务必通过unlock在finally中手工释放,后者jvm自动释放
- 前者通过java代码实现,后者jvm底层实现
- 前者提供了多种 ,入公平锁,非公平锁。前后两者都提供了可重入锁
Condition:
传统上我们实现对于线程的调度和控制,是基于 wait和notify实现。
lock 给我们提供了 await 和 singalAll来实现线程调度,这种方式更加灵活,可控
对于传统的synchronize来说,所有的等待都是在同一个集合中的,而Condition则可以拥有多个 。