模式6--ReadWriteLock
来至《java多线程设计模式》
自己提供一个逻辑锁代替JDK的物理锁synchronized
优点:1.对read操作不进行共享互斥,可以进行多个read操作,提高系统性能
2.适合read》write的情况
package Sample; public final class ReadWriteLock { private int readingReaders = 0; // (A)...实际正在读取的执行绪数量 private int waitingWriters = 0; // (B)...正在等待写入的执行绪数量 private int writingWriters = 0; // (C)...实际正在写入的执行绪数量 private boolean preferWriter = true; // 写入优先的话,值为true public synchronized void readLock() throws InterruptedException { while (writingWriters > 0 || (preferWriter && waitingWriters > 0)) { wait(); } readingReaders++; // (A)实际正在读取的线程数量加1 } public synchronized void readUnlock() { readingReaders--; // (A)实际正在读取的线程数量减1 preferWriter = true; //read处理后优先处理write notifyAll(); } public synchronized void writeLock() throws InterruptedException { waitingWriters++; // (B)正在等待写入的线程数量加1 try { while (readingReaders > 0 || writingWriters > 0) { wait(); } } finally { waitingWriters--; // (B)正在等待写入的线程数量减1 } writingWriters++; // (C)实际正在写入的线程数量加1 } public synchronized void writeUnlock() { writingWriters--; // (C)实际正在写入的线程数量减 preferWriter = false; //write处理后优先处理read notifyAll(); } }
浙公网安备 33010602011771号