phpok做网站教程,wordpress 分类子类,网站app生成器下载,陕西天工建设有限公司官方网站重入锁ReentrantLock
支持重进入的锁#xff0c;表示该锁能够支持一个线程对资源的重复加锁该锁支持获取锁时的公平和非公平的选择 如果在绝对时间上#xff0c;先对锁进行获取的请求一定先被满足#xff0c;那么锁是公平的#xff0c;获取锁是顺序的。 实现重进入 线程再…重入锁ReentrantLock
支持重进入的锁表示该锁能够支持一个线程对资源的重复加锁该锁支持获取锁时的公平和非公平的选择 如果在绝对时间上先对锁进行获取的请求一定先被满足那么锁是公平的获取锁是顺序的。 实现重进入 线程再次获取锁锁需要去识别获取锁的线程是否为当前占据锁定的线程是则再次成功获取锁的最终释放线程重复n次随后在n次释放该锁后其他线程能够获取到该锁锁的最终释放要求锁对于获取进行计数自增计数等于0时表示锁已经成功释放nonfairTryAcquire增加了再次获取同步状态的处理逻辑通过判断当前线程是否为获取锁的线程来决定获取操作是否成功如果是获取锁的线程再次请求则同步状态值增加并返回true获取同步状态成功tryRelease方法将同步状态是否为0作为最终释放的条件当同步状态为0时将占有线程设置为null并返回true表示释放成功 公平FIFO与非公平获取锁的区别 对于非公平锁只要cas设置同步状态成功则表示当前线程获取了锁公平锁ReentrantLock的tryAcquire方法判断条件多了hasQu功能euedPredecessors方法加入了同步队列中当前节点是否有前驱节点的判断如果该方法返回true则表示有线程比当前线程更早的请求获取锁因此需要等前驱线程获取并释放锁后才能继续获取锁。公平锁保证了所得获取按照FIFO原则而代价是进行大量的线程切换非公平锁虽然可能造成线程饥饿但极少的线程切换保证了其更大的吞吐量。
参考Java并发编程的艺术