Future的使用
报价宝综合消息Future的使用
在开发多执行绪时,我们有时会需要返回子执行绪的处理结果,但不幸的是Runable界面是void型别没有返回值的。有人可能会想到用例项变数的方法实现此需求。例项变数的方式当然也是可以的,在其它文章中已经介绍过了,在使用例项变数时要特别注意,因为例项变数有可能会出现执行绪安全问题。其实在Java中已经为我们提供了这样的界面Callable界面。我们看一下Callable界面的定义。

界面中只定义了一个方法call()方法,而不是run()方法,这点要特别注意,它们都可以实现执行绪的异步执行。下面我们来演示一下。


我们呼叫ExecutorService界面submit()方法来新增我们的任务,执行结果和Runable界面没有什么区别。唯一不同就是Runable界面要重写run()方法,Callable界面要重写call()方法。但Callable界面还有一个更强大的功能就是它支援返回型别。通过Callable界面可以返回异步执行后的结果。


ExecutorService界面submit()方法返回一个Future型别。用Future就可以获取Callable界面中异步执行后的任务资料。我们看两个main执行绪的输出时间有些不同。这是因为当呼叫Future界面中的get()方法时,当前执行绪会被阻塞,一直等待子任务的结束,因为子任务中我们延迟了10秒,所以这两个输出时间有些偏差。Future界面中还有其它几个方法。




虽然丢掷了异常,但任务还是执行完了。如果我们将引数修改为true,则执行绪立即中断并且不管当前执行绪是否执行完。


