美文网首页
锁的重入

锁的重入

作者: 玖柒叁 | 来源:发表于2023-09-02 11:30 被阅读0次

什么是可重入

一个线程在执行代码时获取锁之后,如果再继续运行时又遇到同一把锁则能自动获取。

synchronized如何实现可重入

为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1.如果同一个线程再次获取这个锁,计数值将递增,而当线程退出同步代码块时,计数器将会减一。当计数值为0时,这个锁将会被释放。

Lock如何实现可重入

ReentrantLock通过Sync实现锁,而Sync继承了AbstractQueuedSynchronizer。在AbstractQueuedSynchronizer中存在一个state变量,state最初为0说明此时没有线程持有锁,当有线程开始竞争时,他们通过CAS将state修改为1,谁修改成功,谁便获取了锁,并且会将该线程记录到exclusiveOwnerThread中,该变量在AbstractOwnableSynchronizer中,AbstractOwnableSynchronizer是AbstractQueuedSynchronizer的父类。exclusiveOwnerThread变量也帮助实现了可重入,如果当前线程==exclusiveOwnerThread说明当前线程已经持有锁,那么只有增加state的计数即可

final boolean initialTryLock() {
            Thread current = Thread.currentThread();
            if (compareAndSetState(0, 1)) { // first attempt is unguarded
                setExclusiveOwnerThread(current);
                return true;
            } else if (getExclusiveOwnerThread() == current) {
                int c = getState() + 1;
                if (c < 0) // overflow
                    throw new Error("Maximum lock count exceeded");
                setState(c);
                return true;
            } else
                return false;
        }

相关文章

  • java.util.concurrent.locks.Reent

    什么是重入锁 重入锁就是指重复进入锁,它表示该锁能够支持一个线程对资源的重复加锁。 重入锁继承与实现关系 重入锁的...

  • ReentrantLock 源码分析

    锁的基本概念 可重入锁 Reentrant 就是可重入的意思,如果锁具备可重入性,则称作为可重入锁。像synchr...

  • Java并发编程-重入锁

    章节目录 什么是重入锁 底层实现-如何实现重入 公平与非公平获取锁的区别与底层实现 1.什么是重入锁 1.1 重入...

  • Java中的各种锁

    一个线程中的多个流程能不能获取同一把锁:可重入锁和非可重入锁 可重入锁 可重入性:表明了锁的分配机制,是基于线程的...

  • ReentrantLock重入锁

    一、ReentrantLock重入锁 1、ReentrantLock重入锁简介 ReentrantLock可以完全...

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • Java高并发实战——同步控制工具

    (1)、重入锁(ReentrantLock) 重入锁使用java.util.concurrent.locks.Re...

  • 各种锁的概念

    锁的概念 可重入不可重入公平锁非公平锁锁中断通过一个故事理解可重入锁的机制 - 小勇DW3 - 博客园[https...

  • Java多线程 ReentrantLock CAS

    重入锁死 Reentrance Lockout 重入锁死可能会发生在如果一个线程重入一个锁中,ReadWriteL...

  • java并发-独占锁与共享锁,公平锁与非公平锁,重入锁与非重入锁

    java并发-乐观锁与悲观锁,独占锁与共享锁,公平锁与非公平锁,重入锁与非重入锁 java 中的锁 -- 偏向锁、...

网友评论

      本文标题:锁的重入

      本文链接:https://www.haomeiwen.com/subject/ahjtvdtx.html