我是否需要同步 invokeAll 调用的结果?

2024-01-12

我正在增强现有的算法,该算法由多个独立步骤组成,以使用并发任务。每个任务都会创建多个对象来保存其结果。最后,我想要一个从控制方法返回的所有结果的列表。目前,我的代码看起来像这样

private final ExecutorService pool = ...;

// A single task to be performed concurrently with other tasks.
private class WorkHorse implements Callable<Void> {
    private final Collection<X> collect;

    public WorkHorse(Collection<X> collect, ...) {
        this.collect = collect;
    }

    public Void call() {
        for (...) {
            // do work

            synchronized (this.collect) {
                this.collect.add(result);
            }
        }
        return null;
    }
}

// Uses multiple concurrent tasks to compute its result list.
public Collection<X> getResults() {
    // this list is supposed to hold the results
    final Collection<X> collect = new LinkedList<X>();

    final List<WorkHorse> tasks = Arrays.asList(  
        new WorkHorse(collect, ...), new WorkHorse(collect, ...), ...);
    this.pool.invokeAll(tasks);

    // ## A ##
    synchronized (collect) {
        return collect;
    }
}

我真的需要吗synchronized在“## A ##”处强制与工作任务中的修改操作发生先行关系?或者我可以依赖之后发生的所有写操作invokeAll返回并对控制线程可见?有没有什么原因,为什么我不应该从它自己的内部返回结果集合synchronized block?


不,你不需要那个。的文档调用全部 http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ExecutorService.html#invokeAll%28java.util.Collection,%20long,%20java.util.concurrent.TimeUnit%29规定返回时所有工作都应该完成。因此,当您到达 return 语句时,不应再进一步访问收集。

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

我是否需要同步 invokeAll 调用的结果? 的相关文章

  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • SymmetricDS 同步未完美同步

    我有一台运行 SymmetricDS 的 3 个服务器 假设我有节点 1 是主节点 节点 2 节点 3 是子节点 当某些数据插入节点 2 时 它会同步到节点 1 同样 节点 3 的数据也会同步到节点 1 但节点 2 的数据不会发送到节点 3
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐

  • 打开输出流 #0.0 的编码器时出错 - 参数可能不正确,例如比特率、速率、宽度或高度

    我正在使用此命令通过 FFMPEG 将 avi mov m4v 视频文件转换为 flv 格式 usr local bin ffmpeg i home public html files video 1355440448 m4v s 640x
  • 在嵌套资源中自动添加父模型 ID

    Rails 3 中的嵌套资源路由如下 resources magazines do resources ads end 帮助者如magazine ad path被定义 我必须将杂志和广告都传递给它 如果我只有对广告的引用 这会很不方便 ma
  • 对 FAT32 中的文件进行排序,无需再次复制

    我编写了一个小程序 它使用比较器按照我想要的顺序复制 FAT32 驱动器上的文件 例如 按字母顺序或最小文件优先 感谢 Java 7 但如果我向 FAT32 驱动器添加新文件 所有文件都需要重新排序并复制 以确保顺序正确 有没有办法用jav
  • Google Chrome 扩展程序中每个选项卡的本地存储变量范围

    我想存储每个选项卡范围的变量 已经提出了同样的问题 建议是使用 localStorage 但是如何使用localStorage来保存关联数组呢 例如 用户正在登录站点 我想创建一个变量来引用该用户 这样用户将打开许多选项卡并登录许多站点 因
  • PHP SUM 函数

    我有一个如下表 id q id value 1 2 5 2 2 NULL 3 2 5 4 2 NULL 5 4 2 6 4 NULL 7 4 2 8 4 NULL 我想要的是获得 例如 所有值的总和where q id 2 sq mysql
  • 如何以编程方式将照片转换为类似宝丽来的照片?

    如何将现代照片转换为那些照片的外观和感觉宝丽莱照片 http www flickr com groups polaroid 欢迎参考和 或示例代码 谢谢 将图像转换为 HSV cv cvtColor 然后查看调整色调 饱和度值 see ht
  • 运行“react-native run-android”后打包器未启动

    我是 React Native 的新手 当我按照官方教程将我的应用程序部署到 Android 时 它显示一个红色屏幕 显示 无法连接到开发服务器 我正在物理设备上运行 所以我尝试了adb reverse tcp 8081 tcp 8081但
  • Delphi:如何在不使用断言的情况下获取(当前代码行,当前单元,当前函数)?

    我正在尝试在我的程序上创建一个日志系统 它将在文本文件上记录调试消息 并且我想保存代码中调用日志消息的确切位置 但我不想使用 Assert 函数 因为它会创建异常 这个系统不仅仅用于记录异常 我还必须编写一些调试信息 使用断言的示例 pro
  • 能否获取windows平台上每个进程的L2缓存未命中计数?

    我想计算每个进程的内存带宽 任何人都可以告诉我如何获得每个进程的二级缓存未命中 谢谢 回族 有一个截屏 http software intel com file 33638在此英特尔性能计数器监视器 http software intel
  • Visual C# 2010 的 SQLite 安装问题

    我正在尝试使用 SQLite 在 Visual C 2010 中创建数据库 但是当我选择 SQLite 数据库文件 时 我没有机会指向数据库文件 我收到一个对话框 要求我提供连接字符串 我无法提供一个不会给出错误 无法加载文件或程序集 Mi
  • 使用 Itextsharp 填写 PDF 表单

    我正在尝试使用 ITextsharp 填写表单 并尝试使用以下代码来获取 pdf 中的所有字段 string pdfTemplate c Temp questionnaire pdf PdfReader pdfReader new PdfR
  • vim 复制并替换文本

    可以说我有这样的文字 test lorem test2 ipsum 我想复制 lorem 并粘贴到 ipsum 中 我尝试做yi 在 lorem 上 然后在 ipsum 上做了ci 但这用 ipsum 取代了我的 Pastebin 我以前的
  • 绑定时,knockoutjs 选择更改事件被触发

    我有这个淘汰码 http jsfiddle net nickbuus Rwabt http jsfiddle net nickbuus Rwabt 问题是 每当下拉选择框被填满时 就会调用更改事件
  • 为什么这种类型的双关不是未定义的行为?

    这是一个我认为会调用未定义行为的玩具示例 include
  • 突出显示活动选项卡 - CSS

    我有一个使用 CSS 的小型选项卡式导航设置 当鼠标悬停在选项卡上时 颜色会发生变化 很棒 但是 当我单击一个选项卡并导航到相应的页面时 我希望该选项卡 活动选项卡 保持突出显示 指示当前页面 我目前正在通过使用类 currenttab 然
  • 如何限制asp.net中的文件夹访问

    如何限制asp net中的文件夹访问 就像我不希望任何其他人通过链接在浏览器中看到我的上传文件夹http www example com Uploads http www example com Uploads 对于下一代 对我有用的答案是
  • 列表作为字典的键

    我有多个元组列表 例如 1 2 3 4 2 5 6 7 3 我希望将其作为字典的键 因此字典中的每个键都是元组列表 不幸的是 根据TypeError我越来越 unhashable type list 看来python不喜欢哈希列表 我的元组
  • VBScript DateDiff 月份

    我在获取两个日期之间的月份日期差异时遇到问题 这是一个示例 DateDiff m 2014 10 17 2014 10 30 上面的代码返回 0 个月 因为它还不到一个月 但 DateDiff m 2014 10 17 2014 11 01
  • MongoDB C# 使用 Guid 更新插入

    当尝试在 Mongo 中执行 upsert 操作时 我希望它生成 ID 的 GUID 而不是对象 ID 在本例中 我正在检查以确保具有特定属性的对象尚不存在 并且如果发生更新 实际上会引发异常 这是类定义的存根 public class E
  • 我是否需要同步 invokeAll 调用的结果?

    我正在增强现有的算法 该算法由多个独立步骤组成 以使用并发任务 每个任务都会创建多个对象来保存其结果 最后 我想要一个从控制方法返回的所有结果的列表 目前 我的代码看起来像这样 private final ExecutorService p