Runnable、Callable、Future接口区别

我们分别看一下这三个接口的方法:
1、Runnable接口只有一个run()方法 ,并且该方法无返回值(我们相当熟悉)。
public interface Runnable {
   
    public abstract void run();
}
2、Callable接口也只有一个call()方法,但是该方法有具体的返回值。
public interface Callable<V> {
    
    V call() throws Exception;
}
3、Future接口一共有五个方法。
public interface Future<V> {

  
    boolean cancel(boolean mayInterruptIfRunning); 
	
    boolean isCancelled();

    
    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

   
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}
我们先来分析一下Future的使用场景,Executor是Runnable和Callable的调度容器,Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作,当get()方法被调用时,线程会阻塞,直到当前线程执行完成,释放锁。
(1)cancel()方法:如果取消任务成功则返回true,如果取消任务失败则返回false。
如果调用cancel()方法时,任务未执行,无论mayInterruptIfRunning为true或者false 都将返回true;
如果调用cancel()方法时,任务执行已经完成,无论mayInterruptIfRunning为true或者false 都将返回false;
如果调用cancel()方法时,任务正在执行,如果mayInterruptIfRunning为true,,表示可以取消正在执行的任务,则任务将取消,返回值为true,反之如果mayInterruptIfRunning为false,则任务不会取消,返回值为false;
(2)isCanceld()方法:表示任务是否已经完成,若任务完成,则返回true
(3)isDone()方法:方法表示任务是否已经完成,若任务完成,则返回true
(4)get()方法:用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回
(5)get(long timeout, TimeUnit unit)方法:用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null
因此Future一共提供三个功能
1、取消任务
2、判断任务状态(是否已取消、是否已完成)
3、获取任务执行的结果
具体内容今天晚上继续更新......


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值