@FunctionalInterface
public interface Callable返回结果并可能引发异常的任务。 实现者定义一个没有参数的单一方法,称为call 。
Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。
该Executors类包含的实用方法,从其他普通形式转换为Callable类。
从以下版本开始:
1.5
以上内容来自jdk1.8的API文档;
Callable与Runnable的不同:
- Callable可以有返回值;
- 可以抛出异常;
- 调用的方法call(),而Runnable调用的是run();
代码:
package com.zhangkiven.juc.callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class TestCallable {
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread().start();
MyThread myThread = new MyThread();
FutureTask futureTask = new FutureTask<>(myThread); // 适配类
new Thread(futureTask,"A").start();
// 获取Callable的返回值结果;
Integer o = (Integer) futureTask.get();
System.out.println(o);
}
}
class MyThread implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("调用call方法");
return 1024;
}
}