除了继承Thread和实现Runnable接口,创建线程的第三种方式:Callable函数式接口并且可以返回结果FutureTask

即实现runnable接口又能传入Callable的构造方法
为什么要找这样一个方法
因为想new Thread()时传入runnable类型的接口并且想实现callable接口

Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。

FutureTask 的构造方法

FutureTask
可取消的异步计算。 该类提供了一个Future的基本实现 ,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。 结果只能在计算完成后才能检索; 如果计算尚未完成,则get方法将阻止。 一旦计算完成,则无法重新启动或取消计算(除非使用runAndReset()调用计算 )。
A FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现Runnable ,一个FutureTask可以提交到一个Executor执行。
除了作为独立类之外,此类还提供了protected功能,在创建自定义任务类时可能很有用。
在这里插入图片描述

FutureTask小Demo

package juc;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
//runnable接口无返回值
class myThread2 implements Runnable{

    @Override
    public void run() {
        System.out.println("run");
    }
}
//callable接口有返回值
class myThread implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("callable接口");
        return 1000;
    }
}

public class CallableDemo {
    public static void main(String[] args) throws Exception {

        FutureTask<Integer> futureTask = new FutureTask(new myThread());

        new Thread(futureTask,"AA").start();

        System.out.println(futureTask.get());

    }
}

get这个方法永远在最后

原创文章 28 获赞 26 访问量 3376

猜你喜欢

转载自blog.csdn.net/Avril___/article/details/104655008