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