线程执行器 Executor (2)

一、在执行器中取消任务,使用 Future#cancel
    

Future<String> future = executor.submit(() -> "ok");

 boolean isDone = future.cancel(true);

       1.如果任务已经完成或者之前已经被取消,或者由于某种原因而不能被取消,那么方法将返回false,并且任务也不能被取消

        2.如果任务在执行器中等待分配,那么任务将被取消,并且不会开始执行。如果任务已经执行,如果参数中为true那么任务将被取消
        如果参数为false,那么不会取消已经执行的任务

 

二、在执行器中控制任务的完成

        FutureTask 类提供了一个名为done的方法,允许在执行器中的任务执行结束之后,还可以执行一些代码,用来执行一些后期处理操作
 

FutureTask<String> futureTask = new FutureTask<String>(() -> "sdf") {
            @Override
            protected void done() {
                System.out.print("在线程结束后处理");
            }
        };

executor.submit(futureTask);

 

三、处理被执行器拒绝的任务    

       如果执行器调用了shutdown() ,那么执行器只有等待正在运行的任务或者等待执行的任务结束后,才能真正的结束,
        期间如果还有任务发给执行器,这个任务将被拒绝。
 

executor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
    @Override
    public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) {
        System.out.println("被拒绝后的任务将由该处理器,负责处理。否则将抛出RejectedExecutionException");
    }
});

 

 

 

转载于:https://my.oschina.net/u/2552286/blog/1924794

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值