如何使用java并发编程的ExecutorService?

2023-12-15

我使用下面的代码在远程服务器上上传图像。当我使用下面的代码时,它会同时在远程服务器上上传所有图像。

List<Future<String>> futureList = new ArrayList<Future<String>>();
ExecutorService execService = Executors.newFixedThreadPool(Images.size());
for (IImage image : Images) { 
  try {
    //execService.execute(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
    singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
    //Log.d("","singleFuture -------"+singleFuture.get());
    futureList.add(singleFuture);
    Log.d("","futureList Size:"+futureList.size());
  } catch(Exception e){
    execService.shutdown();
  }

每当我使用下面的代码时

   singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
//Log.d("","singleFuture -------"+singleFuture.get());
    futureList.add(singleFuture);

将所有 future 对象添加到 futurelist 中,立即从 runnable 返回(不在 runnable 中等待,直到完成所有图像的上传(后台上传处理正在进行)

但是每当我取消上面代码中下面一行的注释时,在成功上传每个图像后,它就会从可运行状态返回。

singleFuture = execService.submit(lServerRequest.new uploadImages(image.getDataPath(),image.getDisplayName()));
Log.d("","singleFuture -------"+singleFuture.get());
futureList.add(singleFuture);

我的代码有什么问题吗?一次可以多次连接远程服务器吗?或者服务器上有任何负载吗?如何使用并发编程java上传图像?请给我们指导吗?

Do the submit() and execute()功能有同样的效果吗?


你打电话时singleFuture.get()您正在等待操作完成。因此,循环不会继续执行下一条语句,直到该语句返回结果。

您需要在第一个循环中提交任务,之后,另一个循环应该迭代结果future.get()在您的列表中以使其异步

来自@andersoj 的回答;

池大小应该与您的 CPU 核心相关。不是您手中的图像数量。假设你有 2 核 CPU,图像上传 io 时间的系数为 5(只是我猜测的系数)。

POOL_SIZE = NUM​​_OF_CPU_CORE*系数;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用java并发编程的ExecutorService? 的相关文章

  • 如何在Netbeans中插入main方法(快捷方式)

    有时您想运行单个文件来快速测试某些代码 正在输入public static void main String args 每次都很乏味 怎样才能做得更快呢 由于 Netbeans 中预定义的代码模板 这很简单 只需输入psvm并按 Tab 键
  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Spring3/Hibernate3/TestNG:有些测试给出 LazyInitializationException,有些则没有

    前言 我在单元测试中遇到了 LazyInitializationException 的问题 而且我很难理解它 正如你从我的问题中看到的那样Spring 中的数据库会话 https stackoverflow com questions 13
  • 是否有任何API可以将Microsoft Exchange服务器与Java应用程序集成以进行任务同步?

    我正在尝试将 Java Web 应用程序与 Microsoft Exchange 服务器集成以实现双向日历 即任务 同步 是否有用于此集成的 Java 开源 商业 API 谢谢 文卡特 看一眼j 交易所 http sourceforge n
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Java:java.util.ConcurrentModificationException

    我正在制作 2D 目前正在研究用子弹射击 子弹是一个单独的类 所有项目符号都存储在称为项目符号的数组列表中 当它超出屏幕一侧 Exception in thread main java util ConcurrentModification
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 如何用表达式语言获取布尔属性?

    如果我有一堂这样的课 class Person private int age public int getAge return age public boolean isAdult return age gt 19 我可以得到age像这样
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se

随机推荐

  • adb 服务器已过时。杀戮[重复]

    这个问题在这里已经有答案了 我正在使用本教程创建我的第一个反应本机项目 http facebook github io react native 当涉及到执行代码和运行时react native run android我正进入 状态 adb
  • jquery中div从右到左调整大小

    I 想要从右到左设置 div 标签的动画并调整其大小 默认情况下 我从示例中学习并发现它从左到右调整大小 但根据项目要求 我们希望将其按从右到左的顺序排列 我写的代码是 div style background url stripes JP
  • 在Java中如何连接两个字符串?

    我正在尝试在 Java 中连接字符串 为什么这不起作用 public class StackOverflowTest public static void main String args int theNumber 42 System o
  • 通过 HTML/css 关闭 Chrome/Safari 拼写检查 [重复]

    这个问题在这里已经有答案了 有没有办法对于网络开发人员关闭特定的 Chrome Safari WebKit 拼写检查input or textarea元素 我的意思是通过特殊的标签属性或专有的 CSS 指令 有一个CSS指令可以关闭大纲in
  • Visual Studio 2015 社区 Xamarin 跨平台模板缺失

    我使用 Xamarin 安装了 Visual Studio 2015 Community Update 3 更新了 Xamarin 一切正常 但突然 当我尝试创建新项目时 Xamarin 跨平台模板丢失了 我不再有这些模板了 我只有这些 我
  • 将复杂的字符串解析为日期时间

    有人可以告诉我应该如何将以下格式转换为正确的格式DateTime object 11 50 46 AM on Wednesday October 19 2011 string s 11 50 46 AM on Wednesday Octob
  • C# 运行程序并获取运行后的环境变量

    我尝试使用 C 运行两个批处理脚本 然后查看它们如何影响环境 我的代码是 string finalEnvVarsFile Path GetTempFileName string arguments string Format c 0 1 s
  • Git 子树。为什么我不能从子树而不是根开始分支?

    我正在努力尝试理解使用 Git 子树策略 我的目的是将一些不同的存储库整合到一个伞形存储库下的一个玩具存储库小家族中 我正在使用此处详细介绍的子树策略 http help github com subtree merge 我正在绞尽脑汁地试
  • 由用户重命名的按钮

    我在编写某些按钮时遇到问题 这是我到目前为止所得到的 Public Class Form1 Dim Button 12 As Button Dim X As Integer Private Sub EventName Dim message
  • C++ 带权重的随机不重复整数

    我想有效地生成 封闭 范围内唯一 非重复 整数的随机样本 0 rnd max 范围内的每个数字都可以选择 并且每个数字都与样本权重相关联 权重越大 选择该数字的可能性就越大 概率恰好weight i sum weight not taken
  • @property 和 @synthesize 在 Objective-C 中的用途是什么?

    有什么用 财产 and 合成 您能举个例子解释一下吗 非常简短的答案 他们为 ivars 创建访问器 有维基百科上的一些例子 看看那些
  • Matlab:是否有一个函数可以定位数字中的“n”位(即“75673”中的第二位数字,所以5)

    我有一个号码A 7654321 我需要位置 5 处的数字 从开头算起 或从末尾算起的数字 3 在本例中为 3 是否有一个函数可以执行以下操作 getdigit A n 其中 A 是数字 n 是我想要的数字的位置 我可以将数字转换为文本字符串
  • 仍然无法理解 ASP.NET 事件。他们有什么意义?

    也许我很慢 但我只是不明白为什么你会使用不是从实际操作 例如单击 派生的事件 当您只需调用方法时 为什么要经历创建委托和事件的繁琐工作呢 看起来 当您创建一个事件时 您所做的只是创建一种方法 让调用者通过一些复杂的过程来调用一个简单的方法
  • 如何将 ASP.NET 下拉列表 DataTextField 属性绑定到嵌套属性

    我想绑定DataTextFieldASP NET 下拉控件的属性到作为初始数据源的属性的对象的属性 我将如何完成这项特定任务 下拉数据源数据架构 public class A public string ID get set public
  • ajax请求后页面刷新

    好吧 我有一个简单的表格 仅包含一个text field 当我们点击提交时 写入文本字段的数据将存储在数据库中 通过ajax存储 ajax 工作正常并且数据已提交 但是页面会自动刷新并且 URL 包含输入字段的内容 我的表格
  • 我应该使用多个数据库吗?

    我即将使用 Ruby on Rails 创建一个应用程序 我想使用多个数据库 基本上是一个会计应用程序 每个用户都有多个公司 我想为每个公司创建一个数据库 我找到了这个帖子http programmerassist com article
  • Fiware - 上下文代理:NGSIv2 订阅问题

    我正在使用 Orion 上下文代理版本 1 2 0 我使用 NGSIv2 订阅了两个不同的 cygnus 0 11 和 0 13 如下 curl 172 21 0 23 1026 v2 subscriptions s S header Fi
  • 查找重复的图像文件

    我的硬盘中存储了大约 1 TB 的图像 这些是朋友和家人长时间拍摄的照片 从某种意义上说 这些图片中的许多都是重复的 相同的文件保存在不同的位置 可能也具有不同的名称 我想问是否有任何工具 实用程序或方法 我可以编写一个 来找出重复的文件
  • 如何使 rush 与我的 orionInstance 一起工作

    按照我之前的问题如何在 MapViewer 小部件中显示来自 OrionContextBroker 的实体我使用 Rush 配置了我的上下文代理实例 并且正在使用https ngsiproxy lab fi ware org作为 NGSI
  • 如何使用java并发编程的ExecutorService?

    我使用下面的代码在远程服务器上上传图像 当我使用下面的代码时 它会同时在远程服务器上上传所有图像 List