Callable
278字小于1分钟
2024-08-08
jdk 文档
@FunctionalInterface
public interface Callable<V>
返回结果并可能引发异常的任务。 实现者定义一个没有参数的单一方法,称为call 。
Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。
该Executors类包含的实用方法,从其他普通形式转换为Callable类。
可以有返回值
可以抛出异常
方法不同,
Runnable
是run()
,Callable
是call()
栗子
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 1、通过 new Thread().start(); 方式启动
MyThread thread = new MyThread();
// 适配类 futureTask
FutureTask<String> futureTask = new FutureTask(thread);
// 启动线程
new Thread(futureTask, "线程A").start();
// call() 只会打印一遍,因为结果会被缓存,效率高
new Thread(futureTask, "线程B").start();
// 获取 callable 返回结果, get() 方法可能会产生阻塞,call() 方法中可能有耗时操作
String str = futureTask.get();
// Callable
System.out.println(str);
}
class MyThread implements Callable<String> {
@Override
public String call() {
System.out.println("call()");
return "Callable";
}
}
// call()
// Callable