線程執行器 Executor (2)

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");
    }
});
相關文章
相關標籤/搜索