@FunctionalInterface (函数式接口)
public interface Callable
Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。
该Executors类包含的实用方法,从其他普通形式转换为Callable类。
- Callable 有返回值
- 可以抛出异常
- 方法不同。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";
}
}