基於synchronized實現讀寫鎖
昨天面試小米基礎平臺,面試官問了一個這樣的題目,讓我自己實現一個讀寫鎖,用lock實現。想了半天lock不會,最後改用synchronized實現
- 讀寫鎖類的實現
- 兩個變量read、write記錄讀鎖和寫鎖的個數
- synchronized鎖會鎖住一個實例,同時只能等待一個方法執行完才能執行下一個方法操作。
class MyReadWriteLock{
private volatile int read;
private volatile int write;
public MyReadWriteLock(){
this.read = 0;
this.write = 0;
}
public synchronized void readLock() throws InterruptedException{
if(write>0){
wait();
}
read++;
}
public synchronized void readUnLock(){
read--;
notifyAll();
}
public synchronized void writeLock() throws InterruptedException{
if(read>0||write>0){
wait();
}
write++;
}
public synchronized void writeUnLock(){
write--;
notifyAll();
}
}