執行緒逾時:替代方法
雖然 TimerTask 可以處理執行緒內的超時,但這並不是最佳解決方案。請考慮使用 ExecutorService,因為它提供了一種全面的執行緒管理和逾時方法。
ExecutorService 允許您建立可調用任務並將其提交執行。一旦提交,任務就可以透過 Future 物件進行監控。透過在 Future#get() 方法中指定逾時,您可以控制執行緒在拋出例外之前應執行多長時間。
這是一個範例實作:
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class Test { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(new Task()); try { System.out.println("Started.."); System.out.println(future.get(3, TimeUnit.SECONDS)); System.out.println("Finished!"); } catch (TimeoutException e) { future.cancel(true); System.out.println("Terminated!"); } executor.shutdownNow(); } } class Task implements Callable<String> { @Override public String call() throws Exception { // Replace this with your long-running task. Thread.sleep(4000); return "Ready!"; } }
在此場景中,任務運作 4 秒後完成。如果逾時增加到 5 秒,任務將完成而不會終止。如果逾時設定為較短的持續時間,則會拋出 TimeoutException 並取消任務。
要檢查長時間執行的任務中的執行緒中斷,請使用 while (!Thread.interrupted() ) { ... } 環形。透過這樣做,任務可以在必要時優雅地退出。
以上是ExecutorService 如何比 TimerTask 改進線程逾時處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!