Lock

Lock l = ...;l.lock();try {// access the resource protected by this lock} finally {//在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。l.unlock();}
:::tips
不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出时,也会导致锁无故释放。 :::
tryLock
Lock lock = ...;if (lock.tryLock()) {try {// manipulate protected state} finally {lock.unlock();}} else {// perform alternative actions}
关于Lock与synchronized关键字在锁的处理上的重要差别
_1. 锁的获取方式:前者是通过程序代码的方式由开发者手工获取,后者是通过JVM来获取(无需开发者干预)
2. 具体实现方式:前者是通过Java代码的方式来实现,后者是通过JVM底层来实现 (无需开发者关注)
3. 锁的释放方式:前者务必通过unlock()方法在finally块中手工释放,后者是通过JVM来释放(无需开发者关注)
4. 锁的具体类型:前者提供了多种,如公平锁、非公平锁,后者与前者均提供了可重入锁
