1、在Synchronized锁“横行”的时代,假设现在需求是非阻塞地获取锁、响应中断地获取锁、超时地获取锁等需求的时候,Synchronized便解决不了,于是Lock便登场了。
Lock登场将加锁和解锁的行为交给使用者(也就是程序员),使得使用锁更灵活了。针对一个场景,手把手进行锁获取和释放,先获得锁A,然后再获取锁B,当锁B获得后,释放锁A同时获取锁C,当锁C获得后,再释放B同时获取锁D,以此类推。这种场景下, synchronized关键字就不那么容易实现了,而使用Lock却容易许多。
2、Lock的使用也非常简单
Lock lock = new ReentrantLock();
lock.lock();
try {
} finally {
lock.unlock();
}
在使用Lock获取锁和释放锁的注意事项:
(1)在finally块中释放锁,目的是保证在获取到锁之后,最终能够一定被释放。
(2)不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常, 异常抛出的同时,也会导致锁无故释放。