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"); } });