java实现多线程之Callable

前提概要

不管是继承Thread类,还是实现Runnable接口都可以实现多线程,但是这两种方式都没有返回值。于是呢,我要是想要一个返回值怎么办?Callable接口帮你解决了这个问题,让你的线程执行完还有返回值。

使用方法

那么这个接口应该如何使用呢?我们来研究一下子,首先我们先写一个类,实现Callable接口,我们发现方法名变了,不是run()方法了,而是叫做call(),这个接口呢还有一个泛型,这个泛型的类型呢就是你这个call方法的返回值类型

我们看到,我定义泛型的类型是String,然后call()方法的返回值也是String,那么我们如何让它跑起来呢?我们知道啊,要想启动这个子线程,必须得调用Thread.start(),你看像实现Runnable接口的话,就是直接把Runnable接口的实现类的对象传给Thread就行了。但是这个Callable接口似乎并不能直接传给Thread。不过呢,没关系,我们还有一个类FutureTask,这个类可不得了,它能接受Callable的实现类,因为它有一个私有属性就是callable,它能直接传给Thread。那么为什么它能直接传给Thread呢?我们看他的源码就知道了,FutureTask类实现了RunnableFuture接口,而RunnableFuture又继承了Runable,于是乎FutureTask间接的就成为了Runnable的实现类,这样一来,不就能够启动这个子线程了吗。

还是调用thread.start()方法来启动这个线程,然后使用futureTask.get()方法获取此线程的返回值,此方法抛出了两个异常。

如此我们的实现就成功了,返回值也接收到了。

发布了24 篇原创文章 · 获赞 9 · 访问量 6049

猜你喜欢

转载自blog.csdn.net/SiuMu_/article/details/96592762