AbstractQueuedSynchronizer排他锁分析

ThreadPoolExecutor.Worker 继承自 AbstractQueuedSynchronizer,并实现了一些锁相关的方法:

1
2
3
4
public void lock()        { acquire(1); }
public boolean tryLock() { return tryAcquire(1); }
public void unlock() { release(1); }
public boolean isLocked() { return isHeldExclusively(); }

锁的实现:

1
2
3
4
5
6
public final void acquire(int arg) {
// 利用CAS尝试去更新state,如果失败就要进入等待队列
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
selfInterrupt();
}
Read more