java多线程4-如何实现处理线程的返回值

2021-03-04  本文已影响0人  那钱有着落吗
image.png

1.实现处理线程的返回值方法一 主线程等待法

我们创建了一个子线程去处理数据,但是不知道什么时候处理完,那么就可以主线程一直等待着,知道有返回数据,这个时候在执行主线程即可。


image.png
image.png

方法虽然简单,但是缺点也很明确,如果你需要等待的数据过多,代码就会显得非常臃肿混乱了,而且也无法做到精准的控制,我们不知道要等待多久

2.使用Thread类中的join方法阻塞当前线程以等待子线程处理完毕

这里就只需要将循环等待的代码换成t.join()就可以了,这个时候直到子线程处理完毕,主线程才解开阻塞继续往下面走。

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

通过Callalbe接口,就会得到一个future的对象,这个对象可以使用get方法获取返回值。

image.png image.png

下面是FutureTask类:


image.png
image.png
image.png

这个get方法主要是用来阻塞当前调用该方法的线程,知道call方法执行完毕为止,就可以取到返回值了。

image.png

我们看到还有一个get方法,这个方法传入了一个时间,大概逻辑就是在这个时间内如果还没有得到返回值,就报错超时。

image.png

下面是Future类:


image.png image.png image.png image.png

这么一来我们就清楚了FutureTask是实现了Future接口的方法。

image.png

使用了线程池的方法我们是可以批量的执行多线程的。

上一篇 下一篇

猜你喜欢

热点阅读