来至《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; // 写入优先的话,值为truepublic synchronized void readLock() throws InterruptedException {while (writingWriters > 0 || (preferWriter && waitingWriters > 0)) {wait();}readingReaders++; // (A)实际正在读取的线程数量加1}public synchronized void readUnlock() {readingReaders--; // (A)实际正在读取的线程数量减1preferWriter = true; //read处理后优先处理writenotifyAll();}public synchronized void writeLock() throws InterruptedException {waitingWriters++; // (B)正在等待写入的线程数量加1try {while (readingReaders > 0 || writingWriters > 0) {wait();}} finally {waitingWriters--; // (B)正在等待写入的线程数量减1}writingWriters++; // (C)实际正在写入的线程数量加1}public synchronized void writeUnlock() {writingWriters--; // (C)实际正在写入的线程数量减preferWriter = false; //write处理后优先处理readnotifyAll();} }