背景知识
在synchronized实现线程锁中,锁默认是开启的,当线程进入同步代码块/方法之后,锁自动关闭,当线程执行完同步代码块/方法后,锁又自己打开。
这种方法使用简单,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock
Lock的实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作
Lock中提供了获得锁和释放锁的方法(手动完成,非自动)
- void lock():获得锁
- void unlock():释放锁(通常放在finally语句块中执行)
Lock是接口不能直接实例化,这里采用它的实现类ReentrantLock来实例化
具体用法
一般来说unlock方法会放在finally代码块中