很多时候线程执行完需要返回一个结果,此时可以实现Callable接口,该接口支持泛型,需要实现call函数。
需要通过ExecutorService.submit()进行调用,在线程返回时,会自动执行call方法。submit方法会携带返回值,放到List<Futute<T>>中。
源码定义如下:
public interface Callable<V> {
V call() throws Exception;
}
ExecutorService:
<T> Future<T> submit(Callable<T> task);
关于接口的多继承,通常适合将不同的模块整合到一起使用,RunnableFuture就是最好的例子。它同时继承自Runnable和Future,即把线程模块和返回值整合到了一起。