JUC并发系列(七):触及Callable(手敲代码示例)

跑起一个程序,并不难;难的是,能让程序跑多远!—— 一颗剽悍的种子

在这里插入图片描述
JUC并发系列

JUC并发系列(一):什么?听说你搞混了并发和并行
JUC并发系列(二):详解Condition实现精准通知唤醒
JUC并发系列(三):面试问并发,一问锁就懵(怒肝一篇透彻理解锁,面试不慌)
JUC并发系列(四):【面试常问】多种方法解决ArrayList非线程安全,详解CopyOnWriteArrayList
JUC并发系列(五):CopyOnWriteArraySet解决HashSet非线程安全
JUC并发系列(六):ConcurrentHashMap解决HashMap非线程安全
JUC并发系列(七):触及Callable

看过之前多线程系列文章的小伙伴想必对Callable并不陌生。
在这里插入图片描述

深入多线程二:手撕多线程,从会三种创建多线程方式开始:除了常见的两种,你是否了解Callable接口方式?

一、回顾Callable

Callable 不同于 ThreadRunable 需要重写 run 方法,Callable 需要重写的是 call

我们在开发中,最常用使用的是Runable,但是Runable是没有返回值的。Callable呢?

  • 可以有返回值
  • 且可以抛出异常。

二、手敲代码实现

1.跑起Callable

FutureTask相当于一个适配类

new FutureTask(new CallableDemo()))
public class Test{
    public static void main(String[] args) {
        new Thread(new FutureTask(new CallableDemo())).start();
    }
}

 class CallableDemo implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("哈喽");
        return "一颗剽悍的种子";
    }
}

运行结果
在这里插入图片描述

2.Callable执行完成后返回值

获取返回值

futureTask.get();

获取返回值之前需要先开启线程,才可以获取到返回值(有先后顺序)

public class Test{
    public static void main(String[] args) throws ExecutionException, InterruptedException {

      CallableDemo callableDemo =  new CallableDemo();

       FutureTask futureTask = new FutureTask(callableDemo);

       new Thread(futureTask).start();

       String f = (String) futureTask.get();

       System.out.println(f);
    }
}

 class CallableDemo implements Callable<String> {
    @Override
    public String call() {
        System.out.println("哈喽");
        return "一颗剽悍的种子";
    }
}

运行结果
在这里插入图片描述

三、最后

最后的最后,为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。

我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易,
把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值