JUC —— 深入理解Callable

Callable

  • 可以有返回值
  • 可以抛出异常
  • 方法不同,run() / call()
public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyThread myThread = new MyThread();
        FutureTask futureTask = new FutureTask<>(myThread);
        new Thread(futureTask,"A").start();
        String str =(String) futureTask.get();
        System.out.println("返回结果"+str);
    }
}
class MyThread implements Callable<String>{

    @Override
    public String call() throws Exception {
        System.out.println("执行call");
        return "执行call";
    }
}

执行结果:
执行call
返回结果执行call

解释: 为什么实现Callable的类需要用FutureTask来包装一下才可以放入线程中启动呢?
因为Thread只能接受Runnable,很显然Callable就不能直接放入Thread中,翻看Runnable源码,可以找到Runnable有一个实现类FutureTask,可以放入Callable,所以需要通过FutureTask来包装一下Callable,让其跟Runnable挂上关系

细节:

  • 有缓存
  • 结果可能需要等待,会阻塞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值