Java言語で学ぶデザインパターン入門 マルチスレッド編 第6章 Read-Write Lock

読むのは同時にできるけど誰かが読んでいるときは書き込めない。誰かが書き込んでいる間は読むのも書くのもできない。読む処理どうしは排他されないのでパフォーマンスが上がる。

public class ReadWriteLock {
    public synchronized void readLock() {
        while (0 < writers) {
            wait();
        }

        readers++;
    }

    public synchronized void readUnlock() {
        readers--;
        notifyAll();
    }

    public synchronized void writeLock() {
        while (0 < writers || 0 < readers) {
            wait();
        }

        writers++;
    }

    public synchronized void writeUnlock() {
        writers--;
        notifyAll();
    }
}