CompletionService

必备知识:
三种创建线程的方式
java线程池

CompletionService是Java并发库中的一个接口,用于简化处理一组异步任务的执行和结果收集。它结合了Executor和BlockingQueue的功能,帮助管理任务的提交和完成。CompletionService的主要实现类是ExecutorCompletionService
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ExecutorCompletionService例子:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;public class CompletionServiceExample {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService executorService = Executors.newFixedThreadPool(3);CompletionService<Integer> completionService = new ExecutorCompletionService<>(executorService);// 提交一组任务List<Callable<Integer>> tasks = new ArrayList<>();for (int i = 0; i < 5; i++) {final int index = i;tasks.add(() -> {TimeUnit.SECONDS.sleep(index);return index;});}for (Callable<Integer> task : tasks) {completionService.submit(task);}// 获取任务结果for (int i = 0; i < tasks.size(); i++) {Future<Integer> future = completionService.take();Integer result = future.get();System.out.println("Task completed with result: " + result);}// 关闭线程池executorService.shutdown();}
}

在这里插入图片描述

public class ExecutorCompletionService<V> implements CompletionService<V> {private final Executor executor;private final BlockingQueue<Future<V>> completionQueue;public ExecutorCompletionService(Executor executor) {this.executor = executor;this.completionQueue = new LinkedBlockingQueue<>();}public ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue) {this.executor = executor;this.completionQueue = completionQueue;}@Overridepublic Future<V> submit(Callable<V> task) {RunnableFuture<V> f = new FutureTask<>(task);executor.execute(new QueueingFuture(f));return f;}@Overridepublic Future<V> submit(Runnable task, V result) {RunnableFuture<V> f = new FutureTask<>(task, result);executor.execute(new QueueingFuture(f));return f;}@Overridepublic Future<V> take() throws InterruptedException {return completionQueue.take();}@Overridepublic Future<V> poll() {return completionQueue.poll();}@Overridepublic Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException {return completionQueue.poll(timeout, unit);}private class QueueingFuture extends FutureTask<V> {QueueingFuture(RunnableFuture<V> task) {super(task);}@Overrideprotected void done() {completionQueue.add(this);}}
}

在这里插入图片描述

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

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

相关文章

前端必修技能:高手进阶核心知识分享 - CSS 阴影属性详解

CSS 涉及设计到阴影的相关内容包括三个方面&#xff1a;box-shadow属性&#xff08;盒子阴影&#xff09;、 text-shadow属性&#xff08;文本阴影&#xff09;、drop-shadow滤镜。 本篇文章旨在详细介绍和分析三种阴影的具体参数设置和典型用例。 box-shadow属性&#xff08;…

04.C1W3.Vector Space Models

往期文章请点这里 目录 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine S…

STM32-SPI和W25Q64

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. SPI&#xff08;串行外设接口&#xff09;通信1.1 SPI通信简介1.2 硬件电路1.3 移位示意图1.4 SPI时序基本单元1.5 SPI时序1.5.1 发送指令1.5.2 指定地址写1.5.3 指定地址读 2. W25Q642.1 W25Q64简介2.2 硬件电路2…

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理&#xff08;不定期更新&#xff09; 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的&#xff1f;2、动态内存分配在嵌入式系统中的使用有什么注意事项&#xff1f;3、什么是内存碎片&#xff0c;如何减少内存碎片&#xff1f…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题&#xff0c;解决方法&#xff1a; 1.点击任务栏上的开始图标&#xff0c;在显示的应用中&#xff0c;点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性&#xff0c;右侧点击Windows安全…

我国网络安全领域有哪些法律法规?主要内容是什么?

1. 背景介绍 网络信息安全方面的法规在全球范围内都有相应的立法&#xff0c;我们主要的立法有《网络安全法》、《密码法》、《数据安全法》以及《个人信息保护法》。当前也有一些相关的条例和管理办法&#xff0c;接下来就为大家一一介绍。 2. 法规介绍 在中国&#xff0c;…

多线程(进阶)

前言&#x1f440;~ 上一章我们介绍了线程池的一些基本概念&#xff0c;今天接着分享多线程的相关知识&#xff0c;这些属于是面试比较常见的&#xff0c;大部分都是文本内容 常见的锁策略 乐观锁 悲观锁 轻量锁 重量级锁 自旋锁 挂起等待锁 可重入锁和不可重入锁 互斥…

接口测试分析、设计以及实现

接口相关理论 ui功能测试和接口测试哪个先执行&#xff1f;–为什么 结论&#xff1a;接口测试先执行 原因&#xff1a;ui功能测试需要等待前端页面开发完成、后台接口开发完后且前端与后端联调完成。ui功能测试与接口测试的区别&#xff1f; ui功能&#xff1a;功能调用&am…

【原理+使用】DeepCache: Accelerating Diffusion Models for Free

论文&#xff1a;arxiv.org/pdf/2312.00858 代码&#xff1a;horseee/DeepCache: [CVPR 2024] DeepCache: Accelerating Diffusion Models for Free (github.com) 介绍 DeepCache是一种新颖的无训练且几乎无损的范式&#xff0c;从模型架构的角度加速了扩散模型。DeepCache利…

【因果推断】优惠券政策对不同店铺的影响

这次依然是用之前rossmann店铺竞赛的数据集。 之前的数据集探索处理在这里已经做过了&#xff0c;此处就不再赘述了CSDN链接 数据集地址&#xff1a;竞赛链接 这里探讨数据集中Promo2对于每家店铺销售额的影响。其中&#xff0c;Promo2是一个基于优惠券的邮寄活动&#xff0c;发…

SQL Server 2022 中的 Tempdb 性能改进非常显著

无论是在我的会话中还是在我写的博客中&#xff0c;Tempdb 始终是我的话题。然而&#xff0c;当谈到 SQL Server 2022 中引入的重大性能变化时&#xff0c;我从未如此兴奋过。他们解决了我们最大的性能瓶颈之一&#xff0c;即系统页面闩锁并发。 在 SQL Server 2019 中&#x…

Go语言如何入门,有哪些书推荐?

Go 语言之所以如此受欢迎&#xff0c;其编译器功不可没。Go 语言的发展也得益于其编译速度够快。 对开发者来说&#xff0c;更快的编译速度意味着更短的反馈周期。大型的 Go 应用程序总是能在几秒钟之 内完成编译。而当使用 go run编译和执行小型的 Go 应用程序时&#xff0c;其…

如何利用Github Action实现自动Merge PR

我是蚂蚁背大象(Apache EventMesh PMC&Committer)&#xff0c;文章对你有帮助给项目rocketmq-rust star,关注我GitHub:mxsm&#xff0c;文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsmapache.com 1. 引言 GitHub Actions 是 GitHub 提供的一种强大而灵活的自…

SSM中小学生信息管理系统 -计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步&#xff0c;中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架&#xff0c;采用Java编程语言和MySQL数据库&#xff0c;设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心&#xff0c;通过…

赤壁之战的烽火台 - 观察者模式

“当烽火连三月&#xff0c;家书抵万金&#xff1b;设计模式得其法&#xff0c;千军如一心。” 在波澜壮阔的三国历史长河中&#xff0c;赤壁之战无疑是一场改变乾坤的重要战役。而在这场战役中&#xff0c;一个看似简单却至关重要的系统发挥了巨大作用——烽火台。这个古老的…

OpenAI的崛起:从梦想到现实

OpenAI的崛起不仅是人工智能领域的重大事件&#xff0c;也是科技史上一个引人注目的篇章。本文将深入探讨OpenAI从创立到如今的演变过程&#xff0c;分析其成功的关键因素&#xff0c;以及未来的发展方向。 一、OpenAI的初创期&#xff1a;理想主义与混乱并存 OpenAI成立于20…

插入排序——C语言

假设我们现在有一个数组&#xff0c;对它进行排序&#xff0c;插入排序的算法如同它的名字一样&#xff0c;就是将元素一个一个插入到合适的位置&#xff0c;那么&#xff0c;该如何做呢&#xff1f; 如果我们要从小到大进行排序的话&#xff0c;步骤如下&#xff1a; 1.对于…

区间最值问题-RQM(ST表,线段树)

1.ST表求解 ST表的实质其实是动态规划&#xff0c;下面是区间最小的递归公式&#xff0c;最大只需将min改成max即可 f[i][j] min(f[i][j - 1], f[i (1 << j - 1)][j - 1]); 二维数组的f[i][j]表示从i开始连续2*j个数的最小/大值。 例如&#xff1a;我们给出一个数组…

uniapp启动安卓模拟器mumu

mumu模拟器下载 ADB&#xff1a; android debug bridge &#xff0c; 安卓调试桥&#xff0c;是一个多功能的命令行工具&#xff0c;他使你能够与连接的安卓设备进行交互 # adb连接安卓模拟器 adb connect 127.0.0.1:port # 查看adb设备 adb deviceshubuilderx 有内置的adb&a…

MSPM0G3507——滴答定时器和普通定时

滴答定时器定时&#xff1a;&#xff08;放在主函数即可&#xff09; volatile unsigned int delay_times 0;//搭配滴答定时器实现的精确ms延时 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } //滴答定时器中断 void SysTick_Handler(…