天天看点

lock锁 synchronized 关键字 区别

总结自java.util.concurrent.locks 接口Lock源代码注释

lock 支持多个显式的监视器 Condition 。synchronized是隐式的。 lock也可以提供线程互斥。还可以提供内存共享,如ReadWriteLock synchronized  对每个对象提供隐式锁。lock 锁块,并且多个锁需要顺序加锁,逆序解锁。并且是在同一个作用范围内加解锁。 synchronized 编程更容易,避免很多lock的编写错误。lock用于更复杂的环境。手递手,链锁。如锁住a,然后锁住b,然后释放a锁住c,释放b锁住...。lock允许在跨域加解锁。 lock需要手动解锁。并且解锁在try finally try catch中 lock提供了不阻塞式的请求锁方法,try lock 。可以被中断,可以超时。 lock提供和隐式监视器不同的功能,如顺序锁,不可重复使用,死锁检测。如果实现类实现了这些语义,那么实现类必须记录这些语义。 lock也是一个普通的类,可以用作synchronized 的目标。 别用lock类而是使用它的子类。 所有lock实现类必须强制内存同步 如java语言中规定的。 不成功的加锁和解锁操作或者可重复使用的加锁解锁操作不要求内存同步。 三种获取锁的形式(可中断,不可中断,定时)有不同的表现。