簡體   English   中英

替代計划的任務,將來可能會取消

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM