首頁 > Java > java教程 > 如何在Java ExecutorService中實現定時任務中斷?

如何在Java ExecutorService中實現定時任務中斷?

Patricia Arquette
發布: 2024-11-28 01:39:13
原創
694 人瀏覽過

How Can I Implement Timed Task Interruption in a Java ExecutorService?

透過超時中斷 ExecutorService 中的任務

實作一個自訂 ExecutorService 來處理逾時後的任務中斷可能具有挑戰性。然而,Java 並發框架使用 ScheduledExecutorService 提供了一個方便的解決方案。

針對任務逾時的 ScheduledExecutorService

ScheduledExecutorService 允許安排任務在指定的延遲後或定期執行間隔。透過利用此功能,您可以建立自訂 ExecutorService 來監視提交的任務,並在超過預設逾時時中斷它們。

TimeoutThreadPoolExecutor 實作

建立此類任務的一種方法ExecutorService 是 TimeoutThreadPoolExecutor 類,它擴展了標準 ThreadPoolExecutor。它整合了 ScheduledExecutorService (timeoutExecutor) 和並發映射 (runningTasks) 來追蹤正在運行的任務並安排其中斷。

TimeoutThreadPoolExecutor 的功能

  • beforeExecute:當任務執行時提交中斷後,會使用 timeoutExecutor 時間安排中斷。傳回一個 ScheduledFuture 並儲存在 runningTasks 中,將任務對應到其計劃中斷任務。
  • afterExecute:一旦任務完成,其對應的 ScheduledFuture 就會從 runningTasks 中移除並取消,從而中斷任務如果尚未完成。
  • shutdown:優雅關機同時關閉 ThreadPoolExecutor 和 ScheduledExecutorService。
  • shutdownNow:強制關閉 ThreadPoolExecutor 和 ScheduledExecutorService。

用法

到使用此自訂 ExecutorService,使用所需參數實例化 TimeoutThreadPoolExecutor 並開始提交任務。如果任務尚未完成,將在指定的逾時後中斷。

使用 Schedule 的替代方法

中斷 ExecutorService 中長時間運行的任務的另一種方法是使用ScheduledExecutorService提供的調度方法。您可以提交兩個任務:一個執行實際任務,另一個在指定逾時後取消任務。

程式碼範例

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); 
Future handler = executor.submit(new Callable(){ ... });
executor.schedule(new Runnable(){
    public void run(){
        handler.cancel();
    }      
}, 10000, TimeUnit.MILLISECONDS);
登入後複製

此方法可讓您執行一個任務,逾時時間為 10 秒,逾時後該任務將被取消並中斷。

以上是如何在Java ExecutorService中實現定時任務中斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板