首页 > 编程语言 >future.get()处理多个线程的java例子

future.get()处理多个线程的java例子

时间:2023-03-30 12:14:58浏览次数:34  
标签:java BigDecimal get sum util future import

一种代码示例是使用ExecutorService类的submit()方法提交多个Callable任务,并返回多个Future对象,
然后在主线程中循环调用Future对象的get()方法获取结果,并进行汇总1。
代码如下: import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class FutureExample { public static void main(String[] args) throws Exception { // 创建一个线程池 ExecutorService executor = Executors.newCachedThreadPool(); // 创建一个列表存放多个Future对象 List<Future<Double>> futureList = new ArrayList<>(); // 提交多个Callable任务,并返回多个Future对象 for (int i = 0; i < 10; i++) { Future<Double> future = executor.submit(new Callable<Double>() { public Double call() { // 模拟一个耗时的计算 return Math.random() * 100; } }); futureList.add(future); } // 在主线程中做其他事情 System.out.println("Doing something else..."); // 创建一个变量存放总和 BigDecimal sum = BigDecimal.ZERO; // 循环获取异步任务的结果,并进行汇总 for (Future<Double> future : futureList) { Double result = future.get(); sum = sum.add(new BigDecimal(result)); System.out.println("Result: " + result); } // 输出总和 System.out.println("Sum: " + sum); // 关闭线程池 executor.shutdown(); } } 另一种代码示例是使用CompletableFuture类,它提供了更多的方法来创建和组合异步任务,并且可以添加回调函数来处理结果或异常2。
代码如下: import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) throws Exception { // 创建一个列表存放多个CompletableFuture对象 List<CompletableFuture<Double>> futureList = new ArrayList<>(); // 使用静态方法supplyAsync创建多个异步任务,并返回多个CompletableFuture对象 for (int i = 0; i < 10; i++) { CompletableFuture<Double> future = CompletableFuture.supplyAsync(() -> { // 模拟一个耗时的计算 return Math.random() * 100; }); futureList.add(future); } // 在主线程中做其他事情 System.out.println("Doing something else..."); // 创建一个变量存放总和 BigDecimal sum = BigDecimal.ZERO; // 循环获取异步任务的结果,并进行汇总 for (CompletableFuture<Double> future : futureList) { Double result = future.get(); sum = sum.add(new BigDecimal(result)); System.out.println("Result: " + result); } // 输出总和 System.out.println("Sum: " + sum); } }

 

标签:java,BigDecimal,get,sum,util,future,import
From: https://www.cnblogs.com/easycoding20211115/p/17272083.html

相关文章

  • Java流程控制(分支结构、循环结构)
    目录JavaSE流程控制分支结构if...else循环结构whiledowhilefor关键字JavaSE流程控制分支结构if...else//单分支,()中的条件成立,则执行if代码块if(){}//双分支,()......
  • 查询 java的安装路径 java -verbose
    java-verbose  加载Java编程语言代理,请参阅java.lang.instrument-splash:<imagepath>使用指定的图像显示启动屏幕有关详细信息,请参阅......
  • 【THM】Putting it all together(网站组件协同工作介绍)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/puttingitalltogether本文相关内容:了解Web服务的所有单独组件如何协同工作,这种协同工作能让我们可以访问自......
  • 外包杯学习进度(一) | 【Android】【Javaweb】Android与JavaWeb服务器交互教程——搭建
    前言我们老师留了一个题目,这里就不写了,第一需要攻破的问题就是如何将app中的数据域javaweb进行传递,并可以回弹消息等问题。所以就开始了解一下这方面的信息。资料积累参......
  • Java switch case语句
    Javaswitchcase语句switchcase语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法:switch(expression){casevalue://语句break;//可......
  • HTTP Get请求的参数带空格如何处理
    在URL中,空格会被转义成%20,因此在GET请求的参数中,可以将空格替换为%20,或者使用加号(+)代替空格。这些特殊字符在URL中都有特殊的含义,因此需要进行编码,以便正确传递参......
  • Java学习日记3
    2023.3.28学习Java打卡封装禁止直接访问一个对象中数据的实际表示,应通过操作接口来访问。程序设计要求”高内聚,低耦合“。高内聚:类的内部数据操作细节由自己完成,不允许......
  • 杨辉三角,手动输入行数---Java
    packagepractice.people.apple;importjava.util.Scanner;publicclassYangHui{publicstaticvoidmain(String[]args){ Scannermyscanner=newScanner(Syste......
  • React状态 和 JavaScript箭头函数
    React状态和JavaScript箭头函数在看React的状态时见到了JS的箭头函数,一时间没看明白。React状态React把组件看成是一个状态机(StateMachines)。通过与用户的交互......
  • Unity触碰函数OnTriggerStay与Input.GetKeyDown
    (写写博客尝尝鲜)触碰函数中不要使用按键检测我想让玩家在某个区域内进行按键检测,代码如下1voidTriggerPlayerStay(Collider2Dcollider)2{3if(co......