JAVA并发-ReentrantLock怎么实现非公平锁和公平锁

非公平: 1.调用lock()方法时,首先去通过CAS尝试设置锁资源的state变量,如果设置成功,则设置当前持有锁资源的线程为当前请求线程 2.调用tryAcquire方法时,首先获取当前锁资源的state变量,如果为0,则通过CAS去尝试设置state,如果设置成功,则设置当前持有锁资源的线程为当前请求线程

以上两步都属于插队现象,可以提高系统吞吐量

公平: 1.调用lock()方法时,不进行CAS尝试 2.调用tryAcuqire方法时,首先获取当前锁资源的state变量,如果为0,则判断该节点是否是头节点可以去获取锁资源,如果可以才通过CAS去尝试设置state

上面通过判断该线程是否是队列的头结点,从而保证公平性

    原文作者:java锁
    原文地址: https://blog.csdn.net/ignorewho/article/details/80421671
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞