最近在看同事的消息平臺的問題進行優(yōu)化,其中一點就是推送來的消息沒有區(qū)分優(yōu)先級,造成實時性要求高的不能優(yōu)先滿足,被全網下發(fā)的普通優(yōu)先級占用了,造成消息延遲。
對應的改進一點就是采用把現有線程池改為優(yōu)先級隊列。
創(chuàng)建一個RunnablePriority,它實現Runnable接口和參數化為RunnablePriority類的Comparable接口。
其中run方法用來處理業(yè)務。
測試主類如下:
然后分別模擬插入不同優(yōu)先級任務,最后結束。
運行結果如下:
我們將執(zhí)行者轉換成一個基于優(yōu)先級的(執(zhí)行者)。你只要傳入一個參數化為Runnable接口的PriorityBlockingQueue對象作為參數。但是,使用執(zhí)行者時,你應該知道存儲在優(yōu)先級列隊中的所有對象必須實現Comparable接口。
我們已經實現了RunnablePriority類,它實現了Runnable接口和Comparable接口,它被存儲在優(yōu)先級隊列中。這個類有一個Priority屬性,用來存儲任務的優(yōu)先級。如果一個任務的這個屬性有更高的值,它將被更早的執(zhí)行。compareTo()方法決定任務在優(yōu)先級列隊中的順序。在Main類,你提交10個不同優(yōu)先級的任務給執(zhí)行者。你提交給執(zhí)行者的第一個任務將第一個被執(zhí)行。由于執(zhí)行者閑置的,正在等待任務被執(zhí)行,當第一個任務到達執(zhí)行者時,執(zhí)行者立即執(zhí)行它們。你已經創(chuàng)建有2個執(zhí)行線程的執(zhí)行者,所以,前兩個任務將第一個被執(zhí)行。然后,剩下的任務將按它們的優(yōu)先級來執(zhí)行。就是有限執(zhí)行5,再執(zhí)行剩下的1.