我们可以在jdk1.8的帮助文档中看到:很多人可能回答:2种,继承Thread类,实现Runnable接口。
很多忽略了callable这种方式。
也许有人知道callable,也知道callable和Runnable的区别是callable可以有返回值,也可以抛出异常的特性,而Runnable没有。
Callable 与 Runnable 的区别:
代码如下:1、可以有返回值
2、可以抛出异常
3、方法不同,run() / call()
package callable;
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 {
FutureTask futureTask = new FutureTask(new MyThread());//适配类
new Thread(futureTask,"A").start();
//获取Callable的返回结果 这个get方法可能会产生阻塞!把他放到最后 或者使用异步通信来处理!
System.out.println(futureTask.get());
}
}
class MyThread implements Callable {
@Override
public String call() {
System.out.println("call()");
return "success";
}
}



