ReentrantLock是一种基于AQS框架的应用实现,AQS 是核心思想。

第一 、自旋 while(true)

第二 、加锁 保证只有一个线程可以拿到锁,其他线程一直在自旋的循环中等待,CAS 加锁 compare and swap

第三 、用队列实现公平或非公平锁

第四 、LockSupport park、unpark实现阻塞

伪代码

//加锁
//第一 自旋
while(true){ 
//第二 CAS 加锁
    if (unsafe.compareAndSwapInt(,,,)){ //加锁成功 
        break; //加锁成功的跳出循环
    }
    //将block的线程加入队列,以实现公平非公平锁 
    //第三 queue 记录需要加锁的线程
    HashSet.linkedQueue.add(thread); 
    //第四 利用park block 线程
    LockSupport.park();//加锁失败的在此等待 
}
 
//解锁
LockSupport.unpark(thread);

 

相关文章:

  • 2021-06-19
  • 2021-06-09
  • 2021-05-27
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2021-05-15
  • 2020-06-24
猜你喜欢
  • 2021-05-30
  • 2022-12-23
  • 2021-11-16
  • 2021-09-23
  • 2021-10-01
  • 2022-12-23
  • 2021-05-22
相关资源
相似解决方案