java面试:什么是callable和future?

在Java中,若需执行运算任务并获取线程结果,可通过使用java.util.concurrent包中的Callable和Future接口简化实现。Callable接口类似于Runnable接口,允许在call()方法中定义线程执行操作,且call()方法具备泛型返回值。与Runnable实例不同,Callable实例不可直接作为Thread类构造方法参数。Future接口支持保存异步运算...
java面试:什么是callable和future?
在Java中,若需执行运算任务并获取线程结果,可通过使用java.util.concurrent包中的Callable和Future接口简化实现。Callable接口类似于Runnable接口,允许在call()方法中定义线程执行操作,且call()方法具备泛型返回值。与Runnable实例不同,Callable实例不可直接作为Thread类构造方法参数。

Future接口支持保存异步运算结果,具备get()方法用于获取结果,如结果未准备好则线程阻塞直至结果可用。get(long timeout, TimeUnit unit)方法类似,但设有限定时间,超时后抛出TimeoutException。cancel(boolean mayInterrupt)方法允许取消运算,根据参数决定是否立即取消或继续执行。isCancelled()和isDone()方法分别检查运算是否被取消或已完成。

FutureTask类作为适配器,同时实现Runnable和Future接口,关联Callable实例,将Callable转换为Runnable,适合用于Thread类构造方法参数。例如,创建Callable实例、FutureTask实例和Thread实例,启动线程执行Callable实例中的call()方法,运算结果保存在FutureTask实例中。

通过Machine类示例(Machine.java),演示了两个线程间进行异步运算的过程。Machine类实现了Callable接口,threadMachine线程执行call()方法计算从1加到100的和并返回结果。主线程调用task.get()方法获取运算结果,线程阻塞直至结果可用,退出get()方法。

综上所述,Callable和Future接口提供了一种简洁且高效的方式来实现异步运算,简化了共享变量操作,降低了同步复杂性,并通过Future接口提供了获取运算结果的灵活性和控制能力。2024-11-12
mengvlog 阅读 8 次 更新于 2025-07-18 08:55:52 我来答关注问题0
  •  百度网友8d6bf69 说5种花,其中一种是百合花

    非洲菊(扶郎花)---transvaal daisy, gerbera 紫鹅绒---java velvetplant 百日草---youth-and-old-age,common zinnia 马蹄莲---calla lily 香豌豆---sweet-pea 彩叶草---common graden coleus 贝壳花---molucca balm 蒲包花---slipper wort 瓜叶菊---florists cineraria 豆瓣绿---peperomia 镜面草---roundleaf...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部