1、在執行器中取消任務,使用 Future#cancel
java
Future<String> future = executor.submit(() -> "ok"); boolean isDone = future.cancel(true);
1.若是任務已經完成或者以前已經被取消,或者因爲某種緣由而不能被取消,那麼方法將返回false,而且任務也不能被取消ide
2.若是任務在執行器中等待分配,那麼任務將被取消,而且不會開始執行。若是任務已經執行,若是參數中爲true那麼任務將被取消
若是參數爲false,那麼不會取消已經執行的任務線程
2、在執行器中控制任務的完成code
FutureTask 類提供了一個名爲done的方法,容許在執行器中的任務執行結束以後,還能夠執行一些代碼,用來執行一些後期處理操做
it
FutureTask<String> futureTask = new FutureTask<String>(() -> "sdf") { @Override protected void done() { System.out.print("在線程結束後處理"); } }; executor.submit(futureTask);
3、處理被執行器拒絕的任務 io
若是執行器調用了shutdown() ,那麼執行器只有等待正在運行的任務或者等待執行的任務結束後,才能真正的結束,
期間若是還有任務發給執行器,這個任務將被拒絕。
class
executor.setRejectedExecutionHandler(new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) { System.out.println("被拒絕後的任務將由該處理器,負責處理。不然將拋出RejectedExecutionException"); } });