FutureTask、Runnable、Callable三者关系

先来看下Future接口特性

public interface Future<V> {
   
    boolean cancel(boolean var1); // 取消任务

    boolean isCancelled(); // 判断是否取消

    boolean isDone(); // 判断是否完成

    V get() throws InterruptedException, ExecutionException; // 获取返回值, 并且可以抛异常

    V get(long var1, TimeUnit var3) throws InterruptedException, ExecutionException, TimeoutException; // 指定时间内获取返回值, 并且可以抛异常
}

FutureTask实现了RunnableFuture接口
实现Runnable接口, 作用是可以通过new Thread(futureTask).start()的方式执行线程
实现Future接口, 作用是添加Future接口特性

Runnable接口, 只具备run方法线程执行体, 不具备返回值, 抛异常, Future特性
Callable接口, 只具备call方法线程执行体, 具备返回值, 抛异常, 不具备Future特性

使用FutureTask, 目的就是给Runnable和Callable包裹上Future的特性

FutureTask源码解析:

1.FutureTask本身实现了RunnableFuture接口, 并且内部有个成员变量为Callable类型
当创建FutureTask对象时
若传入Callable对象, 则该成员变量就是传入的Callable对象

public FutureTask(Callable<V> callable) {
   
    if (callable == null) {
   
        throw new NullPointerException();
    } else {
   
        this.callable = callable;
        this.state = 0;
    }
}

若传入的是Runnable对象,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值