波多野结衣 蜜桃视频,国产在线精品露脸ponn,a v麻豆成人,AV在线免费小电影

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了基于時間的線程安全優先級隊列的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我需要一些類似隊列的數據結構來執行以下任務:

    有些線程添加了附加延遲值的數據項(例如秒),例如queue.add(data, delay)。
    既可以有不同的延遲,也可以有相同的延遲,隊列應充當優先隊列:延遲越小的項越接近末尾(出隊速度更快)
    排隊項每秒鐘delay應減1,直到達到0(然后保持不變為0)
    delay0的項目中,出列順序就是它們的插入順序(雖然到達0的順序更好)
    一些客戶端線程系統地從該隊列中獲取元素,并且它只提供delay = 0元素。如果不存在,則它將阻塞或引發。

因此,我想要一些隊列的功能+一點調度、線程安全。我懷疑,在某些情況下,這類事情應該是一項相當常規的任務。

我的問題:對于此類任務,是否有針對javascala的生產就緒解決方案?我不想再發明另一輛自行車了。

編輯:似乎在Java標準庫中確實有這樣的東西:DelayQueue,在回答之前先看一看。

推薦答案

您可以使用應作為輸入Comparable對象的PriorityQueue。
您應該基于Timestamp字段比較這些對象(越小越好);正如@Henry已經提到的,存儲Timestamp比存儲delay更好。這非常容易實現;只需存儲currentTime + delay。

然后,當客戶端請求head元素時,您需要創建一個synchronized方法,該方法執行以下操作:

首先peek()檢查head元素是否有timestamp < currentTime
如果是,poll()這個元素,否則拋出。


第二個解決方案(移植自我的評論):

實際上,可以添加一個ScheduledThreadPoolExecutor作為中間層;
現在您不需要Timestamp,只需將delay提供給Executor。

當每個runnable/callable執行時,相應的對象被添加到另一個正常的FIFO隊列,在那里它將立即可用于輪詢;

您的客戶端現在可以輪詢第二個FIFO隊列中的元素。

這篇關于基于時間的線程安全優先級隊列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:優先級 時間 線程 隊列
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定