6. Callable

@FunctionalInterface (函数式接口)
public interface Callable返回结果并可能引发异常的任务。 实现者定义一个没有参数的单一方法,称为call 。

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

该Executors类包含的实用方法,从其他普通形式转换为Callable类。

  1. Callable 有返回值
  2. 可以抛出异常
  3. 方法不同。call()

代码测试

Thread 运行 Callable 线程

package pers.vincent.matrix.subject.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyThread2 myThread2 = new MyThread2();
        // A FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现Runnable ,一个FutureTask可以提交到一个Executor执行。
        Callable callable;
        FutureTask futureTask = new FutureTask<>(myThread2);

        new Thread(futureTask).start();

        String str = (String) futureTask.get();
        System.out.println(str);
    }

}

// 旧的多线程实现方法
class MyThread implements Runnable{

    @Override
    public void run() {

    }
}

// callable
class MyThread2 implements Callable<String>{

    @Override
    public String call() throws Exception {
        System.out.println("AAAAA");
        return "123";
    }
}
posted @ 2020-08-07 10:57  湘北不会输的  阅读(82)  评论(0编辑  收藏  举报