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块中,因为如果在获取锁(自定义锁的实现)时发生了异常, 异常抛出的同时,也会导致锁无故释放。



