是的,Java的ThreadPoolExecutor
可以取消任務。你可以使用Future.cancel()
方法來取消一個任務。當你提交一個任務給ThreadPoolExecutor
時,它會返回一個Future
對象,你可以使用這個對象來取消任務。
以下是一個簡單的示例:
import java.util.concurrent.*;
public class ThreadPoolExecutorCancelTaskExample {
public static void main(String[] args) {
// 創建一個線程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
3, 5, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()
);
// 提交一個任務并獲取Future對象
Future<?> future = executor.submit(() -> {
try {
System.out.println("Task started.");
Thread.sleep(10000); // 模擬一個耗時任務
System.out.println("Task completed.");
} catch (InterruptedException e) {
System.out.println("Task interrupted.");
}
});
// 取消任務
boolean isCancelled = future.cancel(true);
if (isCancelled) {
System.out.println("Task cancelled.");
} else {
System.out.println("Task not cancelled.");
}
// 關閉線程池
executor.shutdown();
}
}
在這個示例中,我們創建了一個ThreadPoolExecutor
,提交了一個任務,并在任務開始執行后取消了它。future.cancel(true)
方法嘗試取消任務,如果任務已經被取消或者由于其他原因無法取消,它將返回false
。