为什么需要读写分离锁
- 读 和 读的操作是不需要加锁的, 只有存在写操作才需要加锁
- 对共享变量的读 读操作不用锁
- 读和写不可同时发生
- 写和写也不可同时发生
实际上当读操作比较多时,此时的性能会更高
代码实现
public class ReadWriteLock {
private int readingReaders;
private int waitingReaders;
private int writingWriters;
private int waitingWriters;
public synchronized void readLock() throws InterruptedException {
this.waitingReaders++;
try {
while(writingWriters > 0) {
this.wait();
}
this.readingReaders++;
} finally {
this.waitingReaders--;
}
}
public synchronized void readUnlock() {
this.readingReaders--;
this.notifyAll();
}
public synchronized void writeLock() throws InterruptedException {
this.waitingWriters++;
try {
while(this.readingReaders > 0 || this.writingWriters > 0)
this.wait();
this.writingWriters++;
} finally {
this.waitingWriters--;
}
}
public synchronized void writeUnlock() {
this.writingWriters--;
this.notifyAll();
}
}