AbstractQueuedSynchronizer

ReentrantLock implements Lock 主要定义了一个内部类Sync是继承AbstractQueuedSynchronizer
所以看看:AbstractQueuedSynchronizer

定义了内部类Node
状态:CANCELLED(1),SIGNAL(-1),CONDITION(-2)
/** Marker to indicate a node is waiting in shared mode */
static final Node SHARED = new Node();
/** Marker to indicate a node is waiting in exclusive mode */
static final Node EXCLUSIVE = null;
volatile int waitStatus; //默认是0,是什么状态?
volatile Node prev;
volatile Node next;
volatile Thread thread; //其实是一个线程的双向链表的节点
Node nextWaiter;
final boolean isShared() {
return nextWaiter == SHARED;
}
Node() { // Used to establish initial head or SHARED marker
}

Node(Thread thread, Node mode) { // Used by addWaiter
this.nextWaiter = mode;
this.thread = thread;
}

Node(Thread thread, int waitStatus) { // Used by Condition
this.waitStatus = waitStatus;
this.thread = thread;
}

AbstractQueuedSynchronizer 利用LockSupport,sun.misc.Unsafe,调用native方法进行信号量的操作。对维护的Thread双向链表进行信号量操作。
这里用到的park相当于wait,unpark相当于notify。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值