?????????????????

?????????????ReentrantLock?????????????????????????????????

??????????????????

class ReentrantLockExample {
int a = 0;
ReentrantLock lock = new ReentrantLock();

public void writer() {
    lock.lock();         //?????
    try {
        a++;
    } finally {
        lock.unlock();  //?????
    }
}

public void reader () {
    lock.lock();        //?????
    try {
        int i = a;
        ……
    } finally {
        lock.unlock();  //?????
    }
}
}

??????ReentrantLock?У?????lock()???????????????unlock()???????????

????ReentrantLock???????????java????????AbstractQueuedSynchronizer??????????AQS????AQS???????????volatile???????????state??????????????????????????????volatile??????ReentrantLock?????????????????????ReentrantLock???????????????????????????

????ReentrantLock???????????????????????????????????

??????ù???????????????lock()????????ù????£?

????1??ReentrantLock:lock()

????2??FairSync:lock()

????3??AbstractQueuedSynchronizer:acquire(int arg)

????4??ReentrantLock:tryAcquire(int acquires)