java——future&callable
简述
八股文面试常出现的题目:java中如何创建线程?
答:1.直接继承Thread类 2.实现Runnable接口 3. 实现Callable接口
Runnable和Callable的区别在于Callable能在线程执行完任务之后获取执行结果
Callable
Callable任务只能在线程池中使用,你翻遍Thread类都不会找到Callable的身影
你可以像这样创建一个callable任务
Callable<String> callable = () -> { // Perform some computation Thread.sleep(2000); return "Return some result"; };
future
future和callable配套使用,future就是一个接口,通过future可以对callable任务进行取消、查询是否完成、获取结果等操作
一般来说,当我们执行一个长时间运行的任务,例如IO操作、远程调用,使用Future就可以让我们暂时去处理其他的任务,等长任务执行完毕再返回其结果
我们可以用线程池的submit方法将这个任务交给线程池中的一个线程执行,submit方法返回一个Future类
然后我们就可以愉快地使用future查询线程的执行结果了
public class CallableExample { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Callable<String> callable = () -> { Thread.sleep(5000); return "Hello from Callable"; }; Future<String> future = executorService.submit(callable); String result = future.get(); executorService.shutdown(); } }
主线程在future.get()的时候会阻塞自己,直到callable的任务完成
FutureTask
待补
references
https://www.cnblogs.com/flydean/p/12680281.html
https://zhuanlan.zhihu.com/p/54459770
https://dayarch.top/p/java-future-and-callable.html
https://juejin.cn/post/6970558076642394142
一点一点积累,一点一点蜕变!