当前位置: 首页 > news >正文

Future接口学习

  1. 使用
ExecutorServiceexecutorService=Executors.newFixedThreadPool(10);Future<Integer>future=executorService.submit(()->{// 执行一些计算任务Class<?>clazz=Class.forName("com.example.demo.dao.ItemDao");System.out.println("Task executed by thread: "+Thread.currentThread().getName());return42;});Objecto=future.get();System.out.println("Result from task: "+o);executorService.shutdown();

上述代码首先创建了一个固定核心线程数(最大线程数)大小的线程池。然后调用ExecutorService的submit方法执行一个有返回值的callable任务,该方法返回一个实现Future接口的对象。然后通过future.get()方法获取任务的执行结果。最后关闭线程池。

  1. 第一行解读
publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<Runnable>());}

第一行ExecutorService executorService = Executors.newFixedThreadPool(10);调用了Executors的newFixedThreadPool方法。该方法调用线程池的构造函数创建ThreadPoolExecutor对象。核心线程数和最大线程数均为nThreads。非核心线程存活时间为0L,单位为毫秒。任务队列为LinkedBlockingQueue。
3. submit方法解读

public<T>Future<T>submit(Callable<T>task){if(task==null)thrownewNullPointerException();RunnableFuture<T>ftask=newTaskFor(task);execute(ftask);returnftask;}

该方法传入要执行的任务task。使用newTaskFor将task封装为RunnableFuture对象。然后调用execute方法执行任务task。该处execute方法调用的是线程池的execute的方法。task的返回值会被赋值给FunnableFuture中的outcome变量。用户使用future.get()方法时,会获取到outcome的值。

  1. future.get()方法详解
publicVget()throwsInterruptedException,ExecutionException{ints=state;if(s<=COMPLETING)s=awaitDone(false,0L);returnreport(s);}

该方法关键逻辑为report方法。

privateVreport(ints)throwsExecutionException{Objectx=outcome;if(s==NORMAL)return(V)x;if(s>=CANCELLED)thrownewCancellationException();thrownewExecutionException((Throwable)x);}

report方法根据任务task执行的状态,返回outcome或者异常。

http://www.jsqmd.com/news/881498/

相关文章:

  • 端到端课程自用 7 规划 端到端的训练数据与评测方法 笔记
  • 昇腾CANN ops-math 仓:数据类型转换的性能陷阱
  • 【小白吃透AI】大语言模型LLM超详细原理全集|通俗图解+训练流程+推理机制+优缺点+面试大全
  • 2026年知名的扫描电镜产品/台式扫描电镜/扫描电镜/SEM扫描电镜口碑好的厂家推荐 - 行业平台推荐
  • 2026年工业设备用日规电源线插头/电源线插头/电源线插头对插/瑞士电源线插头厂家精选合集 - 行业平台推荐
  • 2026年5月儿童护眼灯品牌推荐:TOP5排名书桌防蓝光评测
  • CentOS 7 SSH弱加密算法加固实战指南
  • 鸿蒙PC:Qt适配OpenHarmony实战【乐单】:不接音频引擎,也能先把播放清单 UI 跑起来
  • 室内点云轮廓提取
  • 01-大模型AI:大模型学习指南
  • 2026年靠谱的磁选机/矿用磁选机/潍坊干式磁选机优质厂家汇总推荐 - 行业平台推荐
  • SQL Server 2017 Evaluation 版升级 Developer 版:解决升级卡死与连接失败的全过程复盘
  • 2026年便宜的家用专用电源线/澳标电源线/AC电源线/国标电源线生产厂家推荐 - 品牌宣传支持者
  • Outlook与Gmail OAuth 2.0 Proxy 实现原理与工程实践
  • C语言基础 内存管理
  • 交互式测试与条件有效性:动态数据决策的统计可靠性保障
  • 麒麟系统启动卡住别慌!这可能是磁盘文件系统坏了,试试这几条Linux命令自救
  • 为什么企业要把 EDR 放在终端,HIDS 放在主机?
  • Gemini Omni Flash 完整指南:Google AI 视频生成器深度解析
  • 深入理解RAG中的嵌入模型Embedding Model
  • 陶瓷 3D 打印代加工服务|高精度快交付,研发量产一站式搞定
  • 2026年评价高的昆山扫描电镜/昆山全自动扫描电镜/扫描电镜产品/SEM扫描电镜推荐厂家精选 - 品牌宣传支持者
  • 2026年靠谱的自卸式除铁器定制/潍坊工业除铁器/潍坊矿山除铁器厂家推荐与选型指南 - 行业平台推荐
  • JWT认证深度解析:从签名原理到密钥轮换与灰度升级
  • JavaScript 高频基础面试题
  • 抖音a_bogus生成原理与Python逆向实现全解析
  • 2026年口碑好的温州办公家具/智能办公家具/简约办公家具厂家哪家好 - 行业平台推荐
  • 机器学习对抗概念漂移:恶意浏览器扩展检测的实战与反思
  • LoRa设备射频指纹识别:基于ResNet-34与三重水印的鲁棒认证系统
  • 2026年靠谱的电磁悬挂除铁器/潍坊工业除铁器/潍坊除铁器/永磁自卸除铁器推荐厂家精选 - 品牌宣传支持者