簡體   English   中英

一段時間后徹底殺死未來

[英]Kill a future completely after some time

我的future要做一些艱巨的任務。 我用超時來稱呼那個future 如果超時,我會向客戶端拋出異常,並創建另一個scheduledfuture以最終在一段時間后取消第一個future 這個想法是在初始超時后給一段時間,以供future完成其任務,但是如果在那個時間內還沒有完成,則將其殺死。

我的代碼看起來像

try {
    return future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException) {
   //create a scheduledfuture here which waits for another 5s
   // and kill the above future is it is still not done
   //the callable of scheduledfuture looks like -
   /*
   if (!future.isDone()) {
       future.cancel(true);
   }
   */
}

現在這里有兩個問題-
1. future.cancel(true)只會將中斷標志設置為true。 它不會照原樣結束任務。 我應該如何結束任務? 內部是否有一個JVM進程來檢查線程是否存在中斷標志,如果為true則終止它們?
2.由於現在設置了中斷標志,因此在任務完成之后,是否有一個過程可以重置該標志? 否則,當通過ExecutorService管理的線程嘗試處理包含阻塞調用的下一個請求時,它將失敗並顯示InterruptedException

我應該如何結束任務?

運行任務是一個單獨的過程,請終止該過程以將其停止。 除非已對該任務進行了編碼以支持該線程,否則沒有安全的方法來停止Java中的線程。

由於現在在任務完成后設置了中斷標志,是否有一個進程可以重置標志?

是的,ExecutorService重置中斷標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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