线程执行器 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");
    }
});
相关文章
相关标签/搜索