标签:ued ransient 类的继承 说明 syn final volatil prot ant
浅析JDK1.8 ReentrantLock源码。
写在开篇
ReentrantLock–重入锁,是实现Lock接口的一个同步组件。这篇文章建立在熟悉AQS源码的基础上,同时主要从两个方面来分析ReentrantLock:
重入性的实现原理
公平锁和非公平锁
类的继承关系
ReentrantLock实现了Lock和Serializable接口。
public class ReentrantLock implements Lock, java.io.Serializable {
成员变量
/**
/**
/**
abstract static class Sync extends AbstractQueuedSynchronizer {
private static final long serialVersionUID = -5179523762034025860L;
/**
* 非公平和公平锁的lock()方法有不同的实现。
*/
abstract void lock();
/**
* 非公平的独占锁获取同步状态
*/
final boolean nonfairTryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();
if (c == 0) {
if (compareAndSetState(0, acquires)) {
setExclusiveOwnerThread(current);
return true;
}
}
else if (current == getExclusiveOwnerThread()) {
int nextc = c + acquires;
if (nextc < 0) // overflow
throw new Error("Maximum lock count exceeded");
setState(nextc);
return true;
}
return false;
}
/**
* 尝试释放锁
*/
protected final boolean tryRelease(int releases) {
int c = getState() - releases;
if (Thread.currentThread() != getExclusiveOwnerThread())
throw new IllegalMonitorStateException();
boolean free = false;
if (c == 0) {
free = true;
setExclusiveOwnerThread(null);
}
setState(c);
return free;
}
}
构造方法
/**
* 默认构造非公平锁
*/
public ReentrantLock() {
sync = new NonfairSync();
}
/**
* @param fair true构造公平锁,false构造非公平锁
*/
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
非公平锁
非公平模式加锁流程
加锁流程从lock.lock()开始
public void lock() {
sync.lock();
}
标签:ued ransient 类的继承 说明 syn final volatil prot ant
原文地址:https://www.cnblogs.com/kyrie17/p/12231156.html