2016-10-10 21 views
0

如何實現一個服務(類),其中有三級用戶(線程)以不同的優先級訪問它?Java:三級用戶併發性

  • 線程lv1:優先於所有;當他們使用該服務,其他用戶被允許
  • 線程LV2:優先LV3
  • 線程LV3:普通用戶

理想的情況下,

  • 的main():啓動線程
  • 服務():協調訪問某些數據
  • 用戶:請求訪問數據,使用它,釋放訪問

有沒有這樣做的好方法?

+0

你可以分享一些代碼你試過 –

+0

我認爲你的優先級在1和2之間是矛盾的。當lv2的顯式情況是「優先於lv1」時,lv1如何具有「優先於全部」?這似乎是一個僵局會導致 –

+0

@EvanBechtol:對不起,我的意思是lv3;固定 – fawim

回答

0

您可以使用三個ReadWriteLock s來獲得級別排他性,每個級別一個。

3級用戶將使用level3Lock上的讀鎖。

2級用戶將使用level3Lock上的寫鎖定和level2Lock上的讀鎖定 - 當2級用戶正在處理數據時,3級用戶無權訪問。

一級用戶將繼續傳統並鎖定三級和二級鎖。

但是 - 這隻實現排他性。如果你真的想要優先功能,你可以使用隊列控制訪問 - PriorityQueue是一個明顯的選擇。正確設置Executor然後將處理來自該隊列的任務。

+0

以下的解決方案很好,我喜歡它! (你只需將lv2換成lv3,但沒關係,我喜歡這個主意) – fawim