实现处理线程的返回值

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. 关闭线程池
    在这里插入图片描述
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页