实现处理线程的返回值

1. 给run()方法传参

实现的方式主要有三种

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

这里不贴具体代码。可以自行实验

2. 如何实现处理线程的返回值

2.1 主线程等待法

主线程等待法实现起来比较简单,但是必须自己实现线程等待逻辑,当需要等待的变量一多,代码会变得异常的臃肿,而且无法控制等待多久,无法精准控制
在这里插入图片描述
在这里插入图片描述

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

使用join也能得到同样的结果,并且不用线程去做等待,join方法能做到比主线程等待法做到更精准的控制,实现起来更简单,但是缺点是粒度不够细,比如run方法里有循环任务,当i=5的时候需要执行别的线程任务时,无法使用join方法来控制
在这里插入图片描述
在这里插入图片描述

2.3 通过Callable接口实现: 通过FutureTask 或者通过线程池获取

2.3.1 通过Future Task获取
  1. 创建自定义类,实现Callable接口
  2. 重写call方法,并将业务逻辑写在call方法中
  3. 创建自定义类对象
  4. 创建FutureTask对象,并将callable对象传入
  5. 创建Thread对象,传入FutureTask对象,由于FutureTask类实现了RunnableFuture接口,RunnableFuture接口继承了Runnable接口,所以可以传入Thread对象中
  6. 启动线程执行任务
  7. 调用isDone方法判断任务是否执行完成
  8. 调用get()方法获取线程任务返回值
    在这里插入图片描述
    在这里插入图片描述
2.3.2 通过线程池获取返回值
  1. 创建线程池
  2. 往线程池提交MyCallable执行线程
  3. 使用isDone函数判断任务是否执行完成
  4. 获取线程返回值
  5. 关闭线程池
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值