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

Future接口学习

使用ExecutorServiceexecutorServiceExecutors.newFixedThreadPool(10);FutureIntegerfutureexecutorService.submit(()-{// 执行一些计算任务Class?clazzClass.forName(com.example.demo.dao.ItemDao);System.out.println(Task executed by thread: Thread.currentThread().getName());return42;});Objectofuture.get();System.out.println(Result from task: o);executorService.shutdown();上述代码首先创建了一个固定核心线程数最大线程数大小的线程池。然后调用ExecutorService的submit方法执行一个有返回值的callable任务该方法返回一个实现Future接口的对象。然后通过future.get()方法获取任务的执行结果。最后关闭线程池。第一行解读publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueueRunnable());}第一行ExecutorService executorService Executors.newFixedThreadPool(10);调用了Executors的newFixedThreadPool方法。该方法调用线程池的构造函数创建ThreadPoolExecutor对象。核心线程数和最大线程数均为nThreads。非核心线程存活时间为0L单位为毫秒。任务队列为LinkedBlockingQueue。3. submit方法解读publicTFutureTsubmit(CallableTtask){if(tasknull)thrownewNullPointerException();RunnableFutureTftasknewTaskFor(task);execute(ftask);returnftask;}该方法传入要执行的任务task。使用newTaskFor将task封装为RunnableFuture对象。然后调用execute方法执行任务task。该处execute方法调用的是线程池的execute的方法。task的返回值会被赋值给FunnableFuture中的outcome变量。用户使用future.get()方法时会获取到outcome的值。future.get()方法详解publicVget()throwsInterruptedException,ExecutionException{intsstate;if(sCOMPLETING)sawaitDone(false,0L);returnreport(s);}该方法关键逻辑为report方法。privateVreport(ints)throwsExecutionException{Objectxoutcome;if(sNORMAL)return(V)x;if(sCANCELLED)thrownewCancellationException();thrownewExecutionException((Throwable)x);}report方法根据任务task执行的状态返回outcome或者异常。
http://www.zskr.cn/news/1374833.html

相关文章:

  • 神经网络原理 第九章:自组织映射
  • 2026年靠谱的磁选机/矿用磁选机/潍坊干式磁选机优质厂家汇总推荐 - 行业平台推荐
  • 从零开始手搓一个xv6内核页表:跟着6.S081源码一步步理解walk和mappages函数
  • 合肥Geo搜索优化服务的真实成本与效果分析
  • 字符缓冲流 字节缓冲流
  • 保姆级教程:用Python 3.8 + PyTorch 1.11 从零部署Meta的SAM模型(含VIT-H权重下载与避坑指南)
  • 处理ERA5等气象数据必看:用rioxarray解决NC文件裁剪后经纬度错乱的坑
  • 2026年便宜的家用专用电源线/澳标电源线/AC电源线/国标电源线生产厂家推荐 - 品牌宣传支持者
  • 祖玛游戏开发:状态机与路径拓扑的工程实践
  • 2026年靠谱的自卸式除铁器定制/潍坊工业除铁器/潍坊矿山除铁器厂家推荐与选型指南 - 行业平台推荐
  • 自动驾驶感知系统角点案例检测:语义与协变量分类的统一框架
  • 《Visual Studio 2022中高效使用Git的实战总结:团队协作与版本控制指南》
  • 网络体系结构 | 物理层:传输介质与编码
  • SQL like 与 正则 区别
  • uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御
  • C语言基础 内存管理
  • 2026年靠谱的电磁悬挂除铁器/潍坊工业除铁器/潍坊除铁器/永磁自卸除铁器推荐厂家精选 - 品牌宣传支持者
  • 机器学习与强化学习如何赋能黑盒优化:从代理模型到元优化
  • Chiseling算法:交互式假设检验在因果亚组发现中的应用
  • SSH、SNMP、NETCONF、SFTP
  • 深入理解RAG中的嵌入模型Embedding Model
  • 麒麟系统启动卡住别慌!这可能是磁盘文件系统坏了,试试这几条Linux命令自救
  • 室内点云轮廓提取
  • 13.解决 99% 刷机故障!小米 / 华为 / OV / 苹果通用救砖与分区修复教程
  • 机器学习对抗概念漂移:恶意浏览器扩展检测的实战与反思
  • Web3钱包:钱包集成与签名验证
  • 图像数据质量自动化评估与清洗:从CleanVision到自适应阈值实战
  • Android高版本HTTPS抓包终极方案:Magisk+MoveCert证书迁移
  • 渗透测试信息收集四层穿透模型与实战流水线
  • JWT认证深度解析:从签名原理到密钥轮换与灰度升级