『就是喜欢草莓』Java重入锁ReentrantLock


『就是喜欢草莓』Java重入锁ReentrantLock
文章图片
相同点就是都实现了独占锁的功能 , 并且都支持重入 , ReentrantLock是显式的需要调用lock , sysnchronized是隐式的 。 重入的意思是第一次获取了锁 , 在持有锁期间可以再次获取该锁 , 不用等待 , 也就是不会阻塞 。 不同点:1、ReentrantLock是可以中断的 , 即调用响应中断的获取锁的方法lockInterruptibly2、可以实现公平锁(ReentrantLock(booleanfair)) , 在创建实例的时候传到一个是否公平的参数 。 公平锁就是根据请求的顺序获取锁 , 等待时间最长的优先获取 。 公平锁可以解决饥饿发生概率 , 但是会频繁切换线程 。 3、可以设置超时时间tryLock(longtime,TimeUnitunit) , 解决死锁的情况 。 实现锁的重入1、线程再次获取锁 , 如果当前锁被占有 , 直接获取直接成功2、锁的释放 , 如果获取了x次 , 在释放的时候也会释放x次 , 获取一次计数器加一 , 释放计数一次减一 , 等完全释放后计数为零 , 其他线程就可以再次获取 。
『就是喜欢草莓』Java重入锁ReentrantLock
文章图片
如果使用lock方法 , 需要在finally块中执行unlock方法 。
【『就是喜欢草莓』Java重入锁ReentrantLock】
『就是喜欢草莓』Java重入锁ReentrantLock
文章图片
『就是喜欢草莓』Java重入锁ReentrantLock
文章图片