ReentrantLock 源码分析 Part 1
今天主要讨论的主题是Java的ReentrantLock的由来和加锁的原理。 为什么需要ReentrantLock 作为程序员,还是需要尽量减少重复造轮子这种事情。但是Java既然已经有了synchronized关键词,Java的大佬们再设计Lock是不是一种重复的轮子呢?当然不是,synchronized有一个问题,我们无法主动释放资源。如下所示: sychronize (a) { sychronize (b) { //.. method body } } 假设我们获取了资源a,但是无法获取资源b。此时我们也无法释放资源a。那么整个系统可能就会处在死锁状态。为了解决这个问题,就需要新的轮子来解决。那就是今天想要介绍的主角ReentrantLock。 使用lock的范式 在这个类的一开始作者就贴心的写上了Java并发所需要用到的范式。因为这些代码在多线程中执行,为了确保就算程序出错抛出了异常,所以finally中务必不要忘记加入解锁的相关代码,否则容易造成不知名的死锁情况。 class X { private final ReentrantLock lock = new ReentrantLock(); //.. public void…