剑指Offer(线程)——如何实现处理线程的返回值

run方法是Thread内部类中一个重写的方法没有参数传入,也没有返回值。如果想在实现run方法时传参有三种方法:

  1. 构造函数传参
  2. 成员变量传参
  3. 回调函数传参

了解了如何在run方法内进行传参之后,那么要如何实现处理线程的返回值呢?

实现处理线程的返回值一共有三种方法:

1、主线程等待法

使主线程循环等待直到目标子线程返回值为止;

下面是一个简单的demo:
在这里插入图片描述
使用主线程等待法之后就能获取到子线程的返回值:
在这里插入图片描述
缺点在于如果存在很多的子线程并且等待的时间也不确定的话就会产生很大的未知问题。

2、使用Thread类的join()阻塞当前的线程以等待子线程处理完毕

简单来讲就是使用join替换掉之前的子线程去等待主线程:
在这里插入图片描述
但是join还是存在缺点就是粒度不够细,没有办法精准的进行操作线程运行时间的判断。

3、通过Callable接口实现:通过FutureTask或线程池实现

使用线程时候一般情况下都是没有返回值的,JDK5之前是这样的,Callable这个接口就可以收到线程的返回值。

一个实体类实现Callable接口:
在这里插入图片描述
在两句输出语句之间,返回value的值,获取value值的方法有两种:

  1. FutureTask
    在这里插入图片描述
    输出结果为:
    在这里插入图片描述
  2. 使用线程池方法来获取子线程的返回值
    在这里插入图片描述
    线程池的原理比较简单是启用了很多线程去等待接收返回值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值