在开发多执行绪时,我们有时会需要返回子执行绪的处理结果,但不幸的是Runable界面是void型别没有返回值的。有人可能会想到用例项变数的方法实现此需求。例项变数的方式当然也是可以的,在文章中已经介绍过了,在使用例项变数时要特别注意,因为例项变数有可能会出现执行绪安全问题。其实在Java中已经为我们提供了这样的界面Callable界面。我们看一下Callable界面的定义。
界面中只定义了一个方法call()方法,而不是run()方法,这点要特别注意,它们都可以实现执行绪的异步执行。下面我们来演示一下。
我们呼叫ExecutorService界面submit()方法来新增我们的任务,执行结果和Runable界面没有什么区别。唯一不同就是Runable界面要重写run()方法,Callable界面要重写call()方法。但Callable界面还有一个更强大的功能就是它支援返回型别。通过Callable界面可以返回异步执行后的结果。