目录
1 Runnable和Callable区别
Runnable | Callable |
没有返回值 | 有返回值 |
没有异常 | 有异常 |
1.1 Runnable
class MyThread implements Runnable {
@Override
public void run() {
}
}
1.2 Callable
class MyThread2 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return null;
}
}
1.3 Thread
发现入参里没有Callable类型
可使用FutureTask,相当于中介,即实现了Runnable,也有Callable
class MyThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("*********** come in Callable");
return 1024;
}
}
/**
* Description: 并发异步导致了callable出现,因为需要返回值
* User: hqq
* Date: 2021/8/7
* Time: 13:39
*/
public class callableDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
FutureTask<Integer> futureTask = new FutureTask<>(new MyThread());
Thread t1 = new Thread(futureTask, "AA");
t1.start();
int a = 100;
//是否完成
// while (!futureTask.isDone()) {
// }
int b = futureTask.get(); //建议放最后
System.out.println("*********** result: " +(a+b));
}
}
输出
*********** come in Callable
*********** result: 1124
futureTask.isDone() //查询线程任务是否结束
futureTask.get(); //拿到线程返回值,若线程未结束,会阻塞
2 参考文献
以上内容均来自于下方视频,博客内容仅作为个人学习笔记记录
【1】Java面试_高频重点面试题 (第一、二、三季)_ 面试 第1、2、3季_柴林燕_周阳_哔哩哔哩_bilibili