如何實現一個服務(類),其中有三級用戶(線程)以不同的優先級訪問它?Java:三級用戶併發性
- 線程lv1:優先於所有;當他們使用該服務,其他用戶被允許
- 線程LV2:優先LV3
- 線程LV3:普通用戶
理想的情況下,
- 的main():啓動線程
- 服務():協調訪問某些數據
- 用戶:請求訪問數據,使用它,釋放訪問
有沒有這樣做的好方法?
如何實現一個服務(類),其中有三級用戶(線程)以不同的優先級訪問它?Java:三級用戶併發性
理想的情況下,
有沒有這樣做的好方法?
您可以使用三個ReadWriteLock s來獲得級別排他性,每個級別一個。
3級用戶將使用level3Lock
上的讀鎖。
2級用戶將使用level3Lock
上的寫鎖定和level2Lock
上的讀鎖定 - 當2級用戶正在處理數據時,3級用戶無權訪問。
一級用戶將繼續傳統並鎖定三級和二級鎖。
但是 - 這隻實現排他性。如果你真的想要優先功能,你可以使用隊列控制訪問 - PriorityQueue是一個明顯的選擇。正確設置Executor
然後將處理來自該隊列的任務。
以下的解決方案很好,我喜歡它! (你只需將lv2換成lv3,但沒關係,我喜歡這個主意) – fawim
你可以分享一些代碼你試過 –
我認爲你的優先級在1和2之間是矛盾的。當lv2的顯式情況是「優先於lv1」時,lv1如何具有「優先於全部」?這似乎是一個僵局會導致 –
@EvanBechtol:對不起,我的意思是lv3;固定 – fawim