Java 串行接口调用优化

准备面试总结下

 1.CompletableFuture 

 static ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10, 20, 1000L, TimeUnit.MICROSECONDS, new ArrayBlockingQueue<>(100));public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> task1 = CompletableFuture.supplyAsync(() -> {try {System.out.println("task1");Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}return 1000;}, poolExecutor);CompletableFuture<Integer> task2 = CompletableFuture.supplyAsync(() -> {try {System.out.println("task2");Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}return 2000;}, poolExecutor);CompletableFuture<Integer> task3 = CompletableFuture.supplyAsync(() -> {try {System.out.println("task3");Thread.sleep(10000);} catch (InterruptedException e) {throw new RuntimeException(e);}return 5000;}, poolExecutor);Integer result1 = task1.get();System.out.println(result1);Integer result2 = task2.get();System.out.println(result2);Integer result3 = task3.get();System.out.println(result3);CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(task1, task2, task3);poolExecutor.shutdown();System.out.println("执行完毕");}

2.CoutDownLatch 

static HashMap<String, Integer> map = new HashMap<String, Integer>();public static void main(String[] args) throws InterruptedException, ExecutionException {ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10, 20, 1000L, TimeUnit.MICROSECONDS, new ArrayBlockingQueue<>(100));CountDownLatch countDownLatch = new CountDownLatch(3);Future<Integer> task1 = poolExecutor.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {System.out.println("任务1");Thread.sleep(1000);System.out.println("任务1结束");countDownLatch.countDown();return 1000;}});Future<Integer> task2 = poolExecutor.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {System.out.println("任务2");Thread.sleep(500);System.out.println("任务2结束");countDownLatch.countDown();return 500;}});Future<Integer> task3 = poolExecutor.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {System.out.println("任务3");Thread.sleep(2000);System.out.println("任务3结束");countDownLatch.countDown();return 2000;}});map.put("task1", task1.get());map.put("task2", task1.get());map.put("task3", task1.get());System.out.println("线程跑完了");countDownLatch.await();System.out.println("---------------任务执行结束-------------");poolExecutor.shutdown();}

3.阻塞获取异步调用结果

   public static void main(String[] args) throws ExecutionException, InterruptedException {ExecutorService executorService = Executors.newFixedThreadPool(3);Future<String> submit = executorService.submit(new Callable<String>() {@Overridepublic String call() throws Exception {Thread.sleep(1000);return "Its done";}});while (true){if (submit.isDone()){System.out.println(submit.get());break;}System.out.println(submit.isDone());}}

4.除了上面两个方法 还有 CyclicBarrier,Semaphore也都可以实现,可以自己尝试下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/102656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis哨兵机制原理

Redis哨兵机制可以保证Redis服务的高可用性。它通过启动一个或多个哨兵进程&#xff0c;监控Redis主服务器是否宕机&#xff0c;如果宕机&#xff0c;哨兵进程会自动将一个从服务器&#xff08;Slave&#xff09;升级为主服务器&#xff08;Master&#xff09;&#xff0c;并通…

JavaScript使用类-模态窗口

**上节课我们为这个项目获取了一些DOM元素&#xff0c;现在我们可以继续&#xff1b;**这个模态窗口有一个hidden类&#xff0c;这个类上文我们讲了&#xff0c;他的display为none&#xff1b;如果我们去除这个hidden的话&#xff0c;就可以让这个模态窗口展现出来。如下 cons…

【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法

项目场景&#xff1a; 问题描述 解决方案&#xff1a; 1.临时解决方案 2.永久解决方案 1.首先打开编辑&#xff1a; 2.打开之后最后一行添加代码&#xff1a; 3.最后运行一遍 .bashrc 4.已经可以了&#xff0c;可以试试reboot&#xff0c;重启一下机子 一点一滴才能成长 …

windows的最佳选项卡式窗口管理器软件TidyTabs

下载&#xff1a; https://jmj.cc/s/z1t3kt?pucodeS1wc https://download.csdn.net/download/mo3408/88420433 TidyTabs是一款Windows应用程序&#xff0c;它可以将多个打开的窗口整理成一个选项卡式的界面&#xff0c;使得用户可以更加方便地切换和管理不同的窗口。 Tidy…

java try 自动关闭流

Java Try自动关闭流实现步骤 在开始之前&#xff0c;我们先来了解一下整个实现过程的流程。下面的表格展示了实现"try自动关闭流"的步骤&#xff1a; 步骤 描述 1 创建需要操作的流对象 2 在try语句块中使用流对象 3 在try语句块中自动关闭流对象 接下来…

uniapp web-view调整修改高度设置

web-view默认是占全屏&#xff0c;需求想要在头部添加一个返回导航。实现如下&#xff1a; 界面如下&#xff1a; <view class"myCardNav"><!-- 状态栏占位符 --><uni-nav-bar height"125rpx" border"false" left-icon"le…

【目录】RV1103/RV1106开发记录

【RV1103】Luckfox Pico RV1103 开发记录 【RV1103】Luckfox Pico 构建系统分析 【RV1103】RTL8723bs (SD卡形状模块)驱动开发 【RV1103】SD卡和无线WiFi同时使用

京东商品数据:8月京东环境电器行业数据分析

8月份&#xff0c;环境电器大盘市场整体下滑。鲸参谋数据显示&#xff0c;8月京东平台环境电器的大盘将近570万&#xff0c;环比下滑约29%&#xff0c;同比下滑约10%&#xff1b;销售额为25亿&#xff0c;环比下滑约23%&#xff0c;同比下滑约8%。 *数据源于鲸参谋-行业趋势分析…

网工内推 | 技术支持工程师,厂商公司,HCIA即可,有带薪年假

01 华为终端有限公司 招聘岗位&#xff1a;初级技术支持 职责描述&#xff1a; 1、通过远程方式处理华为用户在产品使用过程中各种售后问题&#xff1b; 2、收集并整理消费者声音&#xff0c;提供服务持续优化建议&#xff1b; 3、对服务中发现的热点、难点问题及其他有可能造…

iMazing2023免费版苹果iPhone手机备份应用软件

iMazing是一款功能强大的苹果手机备份软件&#xff0c;它可通过备份功能将通讯录备份到电脑上&#xff0c;并在电脑端iMazing“通讯录”功能中随时查看和导出联系人信息。它自带Wi-Fi自动备份功能&#xff0c;能够保证通讯录备份数据是一直在动态更新的&#xff0c;防止手机中新…

收银系统商品定价设计思考

一、背景 因为门店系统里商品总共也就几万款&#xff0c;一直以来都是根据条码由总部统一定价销售&#xff0c;现在有加盟店&#xff0c;各门店也有进行各自促销活动的需求&#xff0c;这就需要放开门店自主定价权&#xff0c;所以近段时间系统在商品定价上做了扩展。 二、商…

Mybatis事务如何跟Spring结合到一起?

Mybatis事务如何跟Spring结合到一起&#xff1f; 在Java Web开发中&#xff0c;MyBatis和Spring是两个常用的框架&#xff0c;它们可以有效地结合在一起&#xff0c;提供强大的数据库事务管理功能。在本文中&#xff0c;我们将从数据库事务特性和Spring事务管理源码两个角度来…

2562.找出数组中的串联值

2562. 找出数组的串联值 - 力扣&#xff08;LeetCode&#xff09; 给你一个下标从 0 开始的整数数组 nums 。 现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。 例如&#xff0c;15 和 49 的串联是 1549 。 nums 的 串联值 最初等于 0 。执行下述操作直到 nums…

【SCS-CN】SCS-CN模型中CN值的确定

目录 一、说明二、SWAT三、HEC-HMS四、CN值转换公式五、确定CN25.1 ArcSWAT 2009用户指南5.2 SWAT plus Document5.3 National Engineering Handbook5.4 HEC-HMS水文建模系统原理方法应用5.5 Technical Release 55 (TR-55) 六、确定水文土壤单元&#xff08;HSG&#xff09;6.1…

移动应用-Android开发基础\核心知识点

Android开发基础 知识点 1 介绍了解2 系统体系架构3 四大应用组件4 移动操作系统优缺点5 开发工具6 配置工具7 下载相关资源8JDK下载安装流程9配置好SDK和JDK环境10 第一个Hello word11 AS开发前常用设置12模拟器使用运行13 真机调试14 AndroidUI基础布局15 加载展示XML布局16…

JS VUE 用 canvas 给图片加水印

最近写需求&#xff0c;遇到要给图片加水印的需求。 刚开始想的方案是给图片上覆盖一层水印照片&#xff0c;但是这样的话用户直接下载图片水印也会消失。 后来查资料发现用 canvas 就可以给图片加水印&#xff0c;下面是处理过程。 首先我们要确认图片的格式&#xff0c;我们通…

IX模式和其他模式

根据您提到的 "IX 模式"&#xff0c;我猜测您可能是在讨论分布式事务处理中的一种模式。通常&#xff0c;在分布式事务领域&#xff0c;存在多种模式和协议&#xff0c;用于实现不同类型的分布式事务。以下是一些常见的分布式事务模式以及一些其他常见的模式&#xf…

爬虫数据采集:探秘网络数据的捕获之道

随着互联网的发展&#xff0c;大量的数据被存储在各种网站和服务器上。为了获取这些数据&#xff0c;人们开发了一种称为爬虫的技术&#xff0c;它可以自动化地从网页上提取所需的信息。本文将介绍爬虫数据采集的原理。 网页结构分析&#xff1a;爬虫首先需要分析目标网页的结构…

华为云云耀云服务器L实例评测|使用redis事务和lua脚本

文章目录 云服务器的类型云服务优点redis一&#xff0c;关系型数据库&#xff08;sqlserver&#xff0c;mysql&#xff0c;oracle&#xff09;的事务隔离机制说明&#xff1a;redis事务机制 lualua脚本好处&#xff1a;一&#xff0c;怎么在redis中使用lua脚本二&#xff0c;脚…

vue中计算属性是否可以 异步获取?

众所周知一般来说&#xff0c;这个计算属性是同步计算获取得到&#xff0c;这个也是计算属性的初衷&#xff0c;但是你要是非要在里面 关联一些异步的东西也不是不可以哈。 面试的时候&#xff0c;会问到这个问题&#xff0c;计算属性能不能涉及一些异步的东西&#xff0c;也不…