總結對資源的訪問一般包括兩種動作–讀和寫,多執行緒同一時刻對資源讀操作,雖然有資源競爭,但是這種競爭不足以引起資料不一致,那麼這個時候直接採用排他鎖的方式,
就顯得有些粗暴了。
如果對某個資源讀的操作多於寫的操作,那麼多執行緒讀時並不需要加鎖,很明顯對程式效能的提公升有很大的幫助,於是想搞乙個讀寫鎖的簡單實現。
public inte***ce lock
public inte***ce readwritelock
static readwritelock readwritelock(boolean preferwrite)
}
public class readwritelockimpl implements readwritelock
public readwritelockimpl(boolean preferwriter)
@override
public lock readlock()
@override
public lock writelock()
@override
public int getwaitingwriters()
@override
public int getwritingreaders()
@override
public int getreadingreaders()
void incrementwaitingwriters()
void incrementwritingwriters()
void incrementreadingreaders()
void decrementwaitingwriters()
void decrementwritingwriters()
void decrementreadingreaders()
public object getmutex()
public boolean ispreferwriter()
public void setpreferwriter(boolean preferwriter)
}
public class readlock implements lock
@override
public void lock() throws interruptedexception
}readwritelock.incrementreadingreaders();
}@override
public void unlock()
}
public class writelock implements lock
@override
public void lock() throws interruptedexception
} finally
readwritelock.incrementwritingwriters();}}
@override
public void unlock() }}
public class sharedata
}public char read() throws interruptedexception
slowly();
return newbuffer;
} finally
}public void write() throws interruptedexception
} finally
}private void slowly() catch (interruptedexception e) }}
讀寫鎖分離的迴圈佇列
在很多需要高效能的場合下,鎖的設計一直是乙個比較關鍵的問題。無鎖佇列 讀寫鎖分離的佇列在業界以及學術界都已經有很成熟的研究。在網上也有很多資料,但其實有很多實現都是錯誤的。最近在工作中幫忙追查乙個線上問題時,就發現實現乙個正確的版本是比較困難的事情。背景 實現乙個迴圈佇列,佇列長度已預先分配。支援不...
java多執行緒設計模式1 讀寫鎖模式
關於讀寫鎖模式需要明白幾個要素 1 寫 當前沒有寫操作,以及沒有讀操作 2 讀 當前沒有寫操作 package com.puqiuyu.thread.blog.pattern author sunday public class writeandreadlock public writeandrea...
多執行緒 讀寫鎖模式
讀寫鎖 1.寫寫加鎖 2.讀寫加鎖 3.寫都加鎖 4.讀讀不加鎖 public class readwritelock this readingreaders 因為使用了while,所以,當while結束的時候,說明寫完成了.可以讀取資料了.finally public synchronized v...