Callable是一个接口,作用和Runable相似。

   Callable<Integer> callable = new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {
            int num = 0;
            
            *****

            return num;
        }
    }

FutureTask实现了RunnableFuture接口

RunableFuture接口继承了Future和Runnable接口

image

由于FutureTask实现了Runnable,所以他可以被当成Runnable传入Thread中。

public static void main(String[] args) throws ExecutionException, InterruptedException {
    Callable<Integer> callable = () -> {
        //实现的call方法
        int num = 3;

        return num;
    };

    FutureTask<Integer> futureTask = new FutureTask(callable);
    Thread thread = new Thread(futureTask);
    thread.start();

    //线程执行结果 如果线程没有执行完,则获取方法会阻塞,知道线程执行完或抛出异常
    Integer result = futureTask.get();
}