Callable接口类似于Runnable接口,线程第三种创建方式。
- 可以抛出异常。
- 可以有返回值。
- 方法不同与Runnable接口。Call方法
Callable的Api文档
Runnable的Api文档
FutureTask的Api文档
例:
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 {
// new Thread(new Runnable()).start();
// new Thread(new FutureTask<V>()).start;
// new Thread(new Callable()).start;
MyThread thread = new MyThread();
FutureTask futureTask = new FutureTask(thread);//适配类
new Thread(futureTask,"A").start();
new Thread(futureTask,"B").start();//结果被缓存,效率高
//这个get方法可能会参数阻塞,把他放到最后
//或者使用异步通信来处理
Object o = futureTask.get();
System.out.println(o);
}
}
//Runnable 接口没有返回值,也不能抛出已检查异常
//class MyThread implements Runnable{
class MyThread implements Callable<String>{
@Override
public String call(){
System.out.println("call()");
//耗时操作
return "123";
}
}
原理图: