首页/新闻资讯/正文详情

【异步编程基础】Callable与FutureTask:Callable返回结果,FutureTask等待线程执行并拿到结果

发布时间:2026/11/3 1:23:13 来源:云帆数科 栏目:资讯中心
【异步编程基础】Callable与FutureTask:Callable返回结果,FutureTask等待线程执行并拿到结果
文章目录一、Callable 与FutureTask 的基本原理二、FutureTask包装Callable1. 定义 Callable 任务2. 使用 FutureTask阻塞等待结果三、线程池包装Callable返回FutureJava 提供了多种异步编程工具其中Callable和FutureTask是两个核心组件。它们能够帮助开发者高效地处理耗时任务并获取任务执行结果同时避免阻塞主线程。本文将详细介绍Callable和FutureTask的基本原理、使用方法以及实际应用场景。一、Callable 与FutureTask 的基本原理callable可以返回结果FutureTask等待线程执行并拿到结果1.什么是 CallableCallable是 Java 提供的一个接口表示可以返回结果的任务。与Runnable不同Callable可以返回任务执行的结果并且能够抛出异常。2.Callable 的核心特点返回结果Callable的call()方法可以返回一个结果。抛出异常call()方法可以抛出异常便于处理任务执行中的错误。与线程池结合通常与ExecutorService结合使用提交任务并获取结果。1.什么是 FutureTaskFutureTask是Future接口的一个实现类用于表示异步计算的结果。它可以包装Callable或Runnable任务并提供以下功能检查任务是否完成。获取任务的结果如果任务未完成会阻塞直到任务完成。取消任务的执行。2.FutureTask 的核心特点实现 Future 和 Runnable既可以作为任务执行又可以获取任务结果。**包装 Callable 或 Runnable 任务。线程安全内部实现了线程安全的机制确保多线程环境下的正确性。二、FutureTask包装Callable以下演示如何使用Callable和FutureTask执行异步任务并获取结果。1. 定义 Callable 任务首先定义一个实现Callable接口的任务类importjava.util.concurrent.Callable;publicclassMyCallableTaskimplementsCallableString{OverridepublicStringcall()throwsException{// 模拟耗时操作Thread.sleep(2000);return这是 MyCallableTask;}}2. 使用 FutureTask阻塞等待结果接下来使用FutureTask包装Callable任务并启动一个新线程执行任务importjava.util.concurrent.FutureTask;publicclassFutureTaskExample{publicstaticvoidmain(String[]args)throwsException{// 创建 Callable 任务MyCallableTaskcallableTasknewMyCallableTask();// 使用 FutureTask 包装 Callable 任务FutureTaskStringfutureTasknewFutureTask(callableTask);// 启动一个新线程执行任务newThread(futureTask).start();System.out.println(Main thread is doing other work...);// 获取任务结果会阻塞直到任务完成StringresultfutureTask.get();System.out.println(Task result: result);}}#Mainthread is doing other work...#Taskresult:这是MyCallableTask三、线程池包装Callable返回FutureFutureTask通常与ExecutorService结合使用以更好地管理线程池和任务执行。以下是优化后的示例importjava.util.concurrent.*;publicclassExecutorServiceExample{publicstaticvoidmain(String[]args)throwsException{// 创建线程池ExecutorServiceexecutorExecutors.newFixedThreadPool(2);// 创建 Callable 任务MyCallableTaskcallableTasknewMyCallableTask();// 提交任务并获取 Future 对象FutureStringfutureexecutor.submit(callableTask);System.out.println(Main thread is doing other work...);// 获取任务结果会阻塞直到任务完成Stringresultfuture.get();System.out.println(Task result: result);// 关闭线程池executor.shutdown();}}Mainthread is doing other work...Taskresult:Taskcompleted!通过Callable我们可以定义可以返回结果的任务通过FutureTask我们可以管理任务的执行和结果获取。结合ExecutorService可以进一步优化线程池管理和任务调度。在实际开发中Callable和FutureTask广泛应用于文件读写、网络请求、复杂计算等场景是提升程序性能和响应能力的重要工具。掌握它们的原理和使用方法对于编写高效的异步程序至关重要。

相关推荐

【异步编程基础】回调:主动将结果发送给调用者
【异步编程基础】回调:主动将结果发送给调用者

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:23:13

【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理
【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:23:13

【MYSQL】mysql 常用命令
【MYSQL】mysql 常用命令

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:23:13

CogAgent 9B:AI精准操控GUI界面的终极工具
CogAgent 9B:AI精准操控GUI界面的终极工具

CogAgent 9B:AI精准操控GUI界面的终极工具 导语:基于GLM-4V-9B大模型优化而来的CogAgent 9B正式发布,凭借在GUI感知、操作预测和跨平台适配能力的突破性提升,重新定义了AI驱动的图形界面自动化交互标准。 行业现状:从… · 2026/11/3 1:59:19

【深度学习-实验】花卉识别:用少量数据构建多分类系统的设计思路
【深度学习-实验】花卉识别:用少量数据构建多分类系统的设计思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:59:19

StepVideo-T2V-Turbo:15步生成204帧视频的AI新突破
StepVideo-T2V-Turbo:15步生成204帧视频的AI新突破

StepVideo-T2V-Turbo:15步生成204帧视频的AI新突破 导语:AI视频生成技术迎来效率革命——StepVideo-T2V-Turbo模型实现仅需15步扩散即可生成204帧高质量视频,将文本到视频的创作效率提升3倍以上。 行业现状:从"能生成"… · 2026/11/3 1:59:19

Prometheus+Grafana监控
Prometheus+Grafana监控

部署根目录:/home/ops_app_user/middleware/prometheus 一、部署概述 1.1 适用场景 单业务服务器/小规模集群的主机系统、Docker容器、MySQL数据库、Redis缓存一体化监控,满足生产环境持久化、权限管控、告警预留、可维护性要求。 1.2 组件清单&#xff… · 2026/11/3 1:59:19

【51】番茄成熟度数据集(有v5/v8模型)/YOLO番茄成熟度检测
【51】番茄成熟度数据集(有v5/v8模型)/YOLO番茄成熟度检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:59:19

《潜意识之门(三)》生生不息催眠的三大核心原则:将问题转化为资源的智慧
《潜意识之门(三)》生生不息催眠的三大核心原则:将问题转化为资源的智慧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:58:19

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码