1. Callable 接口
Callable 是 JUC 包下的一个函数式接口,用于实现有返回值的并发任务,可以看作是 Runnable 接口的增强版。
public class Demo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 这里的 callable 对象相当于定义了一个任务,具体执行这个任务还是需要依靠 Thread 类对象
Callable<Integer> callable = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int result = 0;
for (int i = 1; i <= 100; i++) {
result += i;
}
return result;
}
};
// Thread 类的构造方法不能直接接收 callable 类的对象,因此需要借助 FutureTask 类来构造
FutureTask<Integer> futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);
thread.start();
// 这里这个 get 方法就是获取 FutureTask 的返回值,这个返回值就来自 Callable 的 call 方法
// 这个 get 方法可能会阻塞,如果当前线程执行完毕,就会正常执行 get 方法,拿到执行结果
// 如果线程未执行完毕,get 方法就会阻塞等待,直到线程执行完毕
System.out.println(futureTask.get());
}
}


