ReadWriteLock

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();
    }
}

 

你可能感兴趣的:(ReadWriteLock)