在Java中,一般是通过继承Thread类或者实现Runnable接口来创建多线程, Runnable接口不能返回结果,如果要获取子线程的执行结果,一般都是在子线程执行结束之后,通过Handler将结果返回到调用线程,jdk1.5之后,Java提供了Callable接口来封装子任务,Callable接口可以获取返回结果。下面可以看一下Callable接口的定义:

public interface Callable<V> {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}

Callable接口很简单,是一个泛型接口,就是定义了一个call()方法,与Runnable的run()方法相比,这个有返回值,泛型V就是要返回的结果类型,可以返回子任务的执行结果。

线程就是一条指令节点组成的链子。CPU就是一个节点一个节点的去执行里面的命令。这些指令节点就是call()函数里面的代码。按理说CPU每执行一个命令节点,其内部状态都是可以查询到的,但是刚开始Java并没有这种功能,不过,即使到了Callable这里也只能查询最终结果,而不能查询中间状态。