齊齊課定點數(shù)運(yùn)算數(shù)學(xué)庫
Timer結(jié)構(gòu)還定義了一個抽象類TimerTask并且繼承了Runnable接口。業(yè)務(wù)系統(tǒng)實現(xiàn)了這個抽象類的run方法用于提供具體的延時任務(wù)邏輯。
TaskQueue內(nèi)部采用大頂堆的方式,依據(jù)任務(wù)的觸發(fā)時間進(jìn)行排序。而TimerThread則以死循環(huán)的方式從TaskQueue獲取隊列頭,等待隊列頭的任務(wù)的超時時間到達(dá)后觸發(fā)該任務(wù),并且將任務(wù)從隊列中移除。
Timer的數(shù)據(jù)結(jié)構(gòu)和算法都很容易理解。所有的超時任務(wù)都首先進(jìn)入延時隊列。后臺超時線程不斷的從延遲隊列中獲取任務(wù)并且等待超時時間到達(dá)后執(zhí)行任務(wù)。延遲隊列采用大頂堆排序,在延遲任務(wù)的場景中有三種操作,分別是:添加任務(wù),提取隊列頭任務(wù),查看隊列頭任務(wù)。
標(biāo)簽: