[英]Alternate to scheduled a task which may be canceled in future
在我們的服務器中,我們提供了一種功能,可以在特定時間將請求發送到另一台服務器。
場景如下:
Server1正在將對Session1的請求發送到我們的服務器
請求包含一個時間,我們必須在該時間將請求發送到具有相同會話ID的Server1
我們通過在特定時間安排請求來實現此目的。
防爆。
從Server1在10:00 AM收到Session1請求,給定時間為11:00 PM,因此我們將該請求排定為11:00 PM。
唯一的問題是會話可能會在時間之前終止,我們必須取消該會話的計划任務。
在給定時間之前,會話終止的比例為10:8,即十分之八將在時間之前終止。
Java ScheduleThreadPool
僅在調用取消任務而不刪除任務時才將任務標記為取消。
我無法調用Queue.purge()
方法來刪除已取消的任務,因為已取消任務的數量可能在lac ex中。 2紫膠
其他解決方案是
我可以管理<Session-ID, Time>
Map,並按小時檢查將在下一個小時進行身份驗證的Session-ID的數量,並僅計划該Session-ID。 這將減少一些開銷,因為如果它將在時間之前終止,我將從地圖中刪除會話ID。
請建議比這些建議更好的建議,或者建議對現有建議進行任何更改以優化上述解決方案
如果您可以使用ScheduledThreadPoolExecutor :默認情況下,API中有一個選項可讓您刪除已取消的任務: http ://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor 。 HTML#setRemoveOnCancelPolicy(布爾)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.