public final class ReadWriteLock
{
private int readingReaders = 0; // 实际正在读取的线程数量
private int waitingWriters = 0; // 正在等待写入的线程数量
private int writingWriters = 0; // 实际正在写入的线程数量
private boolean preferWrite = true;
public synchronized void readLock () throws InterruptedException
{
while (writingWriters > 0 || (preferWrite && waitingWriters > 0))
{
wait();
}
readingReaders++;
}
public synchronized void readUnLock ()
{
readingReaders--;
preferWrite = true;
notifyAll();
}
public synchronized void writeLock () throws InterruptedException
{
waitingWriters++;
try
{
while (readingReaders > 0 || writingWriters > 0)
{
wait();
}
}
finally
{
waitingWriters--;
}
writingWriters++;
}
public synchronized void writeUnLock ()
{
writingWriters--;
preferWrite = false;
notifyAll();
}
}