介绍:
callable接口类似于Runnable,他们都是为了启动线程设计的。区别就是Runnable不返回结果也不抛出异常,Callable正好相反。
特点:
- 可以返回值
- 可以抛出异常
- 方法不同,不再是run(),而是call()
使用:
- 实现Callable接口(泛型接口传入一个类型,该类型就是call方法的返回值类型)
- 重写call方法,返回值类型就是实现接口时候指定的类型
启动Callable接口的线程
使用FutureTask类进行启动
get()方法会导致阻塞,因为要等到线程返回数据
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyThread myThread = new MyThread();
for (int i = 0; i < 10; i++) {
FutureTask futureTask = new FutureTask<>(myThread);
new Thread(futureTask,i+"").start();//运行线程
String str = (String) futureTask.get();//拿到线程的返回结果,这个操作会导致阻塞,因为要等到线程返回数据
System.out.println(str);
}
}
}
class MyThread implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("call");
return "1234";
}
}