本文导论:
JDK1.5 中新增了Lock接口及其一众实现类,作者是大神 Doug Lea。Lock是一种在多线程环境下控制访问共享资源的工具。在此之前,已经有关键字synchronized用于同步,那么为什么还需要再造一个新的同步工具呢?Lock相比synchronized有什么优势?
总的来讲,Lock提供了比synchronized更灵活更广泛的锁操作。为什么要出现Lock?其实就是搞清楚哪些场景是Lock能做而synchronized不能做,或者都能做但是Lock会更好。
- 独占。 synchronized只能提供对代码块/方法的独占访问,ReadWriteLock可以支持读并发。
- 获取与释放(顺序、作用域、异常)
- synchronized 以块结构的形式获取与释放锁。当获取多个锁时,他们必须以相反的顺序被释放。且锁的获取与释放要在同一个词法作用域中,退出块结构自动释放锁。发生异常,自动释放监视器锁。
- Lock 的实现类允许在不同的词法作用域内以任意的顺序获取和释放锁,但是不会主动释放锁,需要在代码中手动释放。
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
-
获取锁的花样。Lock接口提供了比synch