亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹了基于時(shí)間的線程安全優(yōu)先級(jí)隊(duì)列的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我需要一些類似隊(duì)列的數(shù)據(jù)結(jié)構(gòu)來(lái)執(zhí)行以下任務(wù):

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

因此,我想要一些隊(duì)列的功能+一點(diǎn)調(diào)度、線程安全。我懷疑,在某些情況下,這類事情應(yīng)該是一項(xiàng)相當(dāng)常規(guī)的任務(wù)。

我的問(wèn)題:對(duì)于此類任務(wù),是否有針對(duì)javascala的生產(chǎn)就緒解決方案?我不想再發(fā)明另一輛自行車了。

編輯:似乎在Java標(biāo)準(zhǔn)庫(kù)中確實(shí)有這樣的東西:DelayQueue,在回答之前先看一看。

推薦答案

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

然后,當(dāng)客戶端請(qǐng)求head元素時(shí),您需要?jiǎng)?chuàng)建一個(gè)synchronized方法,該方法執(zhí)行以下操作:

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


第二個(gè)解決方案(移植自我的評(píng)論):

實(shí)際上,可以添加一個(gè)ScheduledThreadPoolExecutor作為中間層;
現(xiàn)在您不需要Timestamp,只需將delay提供給Executor。

當(dāng)每個(gè)runnable/callable執(zhí)行時(shí),相應(yīng)的對(duì)象被添加到另一個(gè)正常的FIFO隊(duì)列,在那里它將立即可用于輪詢;

您的客戶端現(xiàn)在可以輪詢第二個(gè)FIFO隊(duì)列中的元素。

這篇關(guān)于基于時(shí)間的線程安全優(yōu)先級(jí)隊(duì)列的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,

分享到:
標(biāo)簽:優(yōu)先級(jí) 時(shí)間 線程 隊(duì)列
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定