Reentrantlock-的核心内容

 

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);

 

posted @ 2020-10-14 15:54  二叉树的博客  阅读(122)  评论(0编辑  收藏  举报