JDK源码分析——ReentrantLock和LockSupport

M君 6月前 ⋅ 227 阅读

通过分析源码,ReentrantLock使用了state作为锁的状态,并使用LockSupport作为线程等待和唤醒的功能函数。

  1. 线程通过调用ReentrantLock的compareAndSetState(0, 1)方法,设置state的状态为锁定状态,该方法当且仅当state=0的时候成功(state==0表示锁可用),当state!=0的时候代表锁已经被占用,那么该方法肯定失败了。
  2. 当上面的步骤失败之后,这个时候再调用acquireQueued(addWaiter(Node.EXCLUSIVE), arg)方法,这个方法首先再次去设置状态,如果设置不成功那么就将当前线程加入锁的队列中,并通过LockSupport.park(this);方法阻塞到该lock上。

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: