
1、可以有返回值
2、可以抛出异常
3、方法不同,Runnable的run() Callable的call()
6.1、代码测试



package com.chen.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 {
// new Thread(new Runnable()).start();
// new Thread(new FutureTask()).start();
// new Thread(new FutureTask(Callable)).start();
new Thread().start(); // 怎么启动Callable
MyThread thread = new MyThread();
// 适配类
FutureTask futureTask = new FutureTask(thread);
new Thread(futureTask,"A").start();
new Thread(futureTask,"B").start(); // 结果会被缓存,效率高
// 获取Callable的返回结果,这个get方法可能产生阻塞! 把他放到最后或者使用异步通信来处理
Integer o = (Integer) futureTask.get();
System.out.println(o);
}
}
class MyThread implements Callable<Integer> {
@Override
public Integer call() {
System.out.println("call()");
// 耗时的操作
return 1024;
}
}
细节:
1、有缓存
2、结果可能需要等待,会阻塞!
本文介绍Callable接口的基本用法,包括如何创建Callable任务、FutureTask的使用方法及如何获取Callable任务的返回结果。通过示例代码展示了Callable与Runnable的区别,并强调了结果缓存和可能的阻塞特性。
368

被折叠的 条评论
为什么被折叠?



