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

相关文章:

  • 2021-09-02
  • 2021-08-09
  • 2021-08-03
  • 2021-06-02
  • 2021-09-02
  • 2021-05-28
  • 2021-09-05
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2021-06-30
  • 2022-12-23
  • 2021-06-03
  • 2021-09-15
  • 2021-06-15
  • 2021-06-27
相关资源
相似解决方案