首页   快速返回

AQS要点整理     所属分类 java
java.util.concurrent
AbstractQueuedSynchronizer


ReentranLock vs Synchronized

Synchronized 不可中断


公平锁和非公平锁


public class ReentrantLock implements Lock, java.io.Serializable {
    private final Sync sync;
    
    abstract static class Sync extends AbstractQueuedSynchronizer
    
    static final class NonfairSync extends Sync
    
    static final class FairSync extends Sync
    
    
    
public ReentrantLock(boolean fair) {
        sync = fair ? new FairSync() : new NonfairSync();
}
    
    


// 持有锁的线程
private transient Thread exclusiveOwnerThread;

// Head of the wait queue
private transient volatile Node head;
private transient volatile Node tail;
private volatile int state;


state 为 0 ,表示锁没有被占用

1 锁已经被占用,大于1表示重入次数

compareAndSetState

等待队列 CLH(Craig, Landin, and Hagersten) 
双向队列 队头为占用锁的线程, 获取所失败的线程加入队尾
释放锁 唤醒后继节点



LockSupport  park unpark

public static void park(Object blocker) {
        Thread t = Thread.currentThread();
        // 设置阻塞对象,记录线程被谁阻塞的,用于线程监控和分析工具来定位
        setBlocker(t, blocker);
        UNSAFE.park(false, 0L);
        setBlocker(t, null);
}

上一篇     下一篇
elasticsearch term 和 match

kafka1.1.0无法消费问题

JMX配置及java客户端远程连接JMX端口

自定义类加载器例子

java类加载器要点整理

kibana安装配置及使用