这是否需要显式同步?

2023-12-08

我有两个线程,我想确保我在 LinkedBlockingQueue 上正确执行同步。这是正确的吗?或者 (messageToCommsQueue) 上的显式同步不需要吗?

宣言:

    private LinkedBlockingQueue<BaseMessage> messagesToCommsQueue;

方法一:

private void startOperationModeStatusMessageExecutor() {

    ScheduledExecutorService operationModeStatusExecutor = Executors.newSingleThreadScheduledExecutor();
    operationModeStatusExecutor.scheduleAtFixedRate((new Runnable() {

        @Override
        public void run() {
            ModeStatusMessage commsOperateMsg;
                commsOperateMsg = MessageFactory.getModeStatusMessage(status.ordinal());
            synchronized (messagesToCommsQueue) {
                messagesToCommsQueue.add(commsOperateMsg);
            }
        }

    }), 0, 10, TimeUnit.SECONDS);
}

方法二:

    Executor commsSenderExecutor = Executors.newSingleThreadExecutor();
    commsSenderExecutor.execute(new Runnable() {

        @Override
        public void run() {
            while (getStatus().equals(ModeStatus.INITIATE) || getStatus().equals(ModeStatus.OPERATE)) {
                BaseMessage m = null;
                try {
                    synchronized (messagesToCommsQueue) {
                        m = messagesToCommsQueue.take();
                    }
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



            }
        }

    });

是的,没有必要。JavaDoc说:

BlockingQueue 实现是线程安全的。

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

这是否需要显式同步? 的相关文章

  • 为什么在 10 个 Java 线程中递增一个数字不会得到 10 的值?

    我不明白 a 的值为0 为什么 a 不是10 那段代码的运行过程是怎样的 是否需要从Java内存模型来分析 这是我的测试代码 package com study concurrent demo import lombok extern sl
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 单线程程序中可以有竞争条件吗?

    您可以在here https en wikipedia org wiki Race condition Software关于什么是竞争条件的一个很好的解释 我最近看到很多人对竞争条件和线程做出了令人困惑的陈述 我了解到竞争条件只能发生在线程
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 为什么在读取字典时要锁定

    我对我正在阅读的一本关于线程的书 C 3 in a Nutshell 中的代码列表感到困惑 在 应用程序服务器中的线程安全 主题中 给出了以下代码作为 UserCache 的示例 static class UserCache static
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 按降序排序映射java8 [重复]

    这个问题在这里已经有答案了 private static
  • Mongoid 中的 find_or_create_by 线程安全吗?

    我有一个使用 Mongoid 的 find or create by 方法的网络应用程序 poll Poll find or create by fields 在投入生产之前 我尝试运行故障场景 我发现多个用户可以尝试使用此方法访问此资源
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre

随机推荐

  • 如何在 Xamarin Forms 编辑器中设置占位符和占位符颜色

    如何设置占位符文本 and 占位符颜色 in Editor in Xamarin 表单 它没有默认的功能或属性 如何自定义它 参考文档 Xamarin 表单编辑器 为此 您将需要一个自定义渲染器 这是 Android 自定义渲染器 您将需要
  • res.write 无法正常工作。它显示包含 HTML 标签的输出

    我正在使用 API 和 Express 制作一个简单的 Web 应用程序 但我得到的输出与预期不同 我的输出包含文本 包括HTML tags 这是我的代码 const express require express const https
  • Access + VBA + SQL - 如何使用表中的条件将多个查询导出到一个 Excel 工作簿中,同时导出多个工作表

    我需要一些帮助才能将多个查询导出到一个 Excel 工作簿中 但是 多个工作表吗 使用 MS Access VBA 中的表中的条件 附件是供参考的数据库 表名称 Tbl Final 下面列出的列 System User ID 用户类型 St
  • 如何更新 git clone --mirror?

    我创建了一个 git 存储库来镜像实时站点 这是一个非裸 git 存储库 git clone mirror ssh email protected path to repo 现在 为了使此镜像克隆更新其远程源的所有更改 我必须使用哪个或哪些
  • 当从外部分配值时,更改事件不适用于文本框

    我有一个文本框和一个按钮 当我单击该按钮时 它会在文本框中设置特定值 我想每当文本框的值发生更改时提交页面 请检查here HTML
  • .NET 3.5 运行时和 .NET 4 运行时兼容性

    是否可以使用 NET 4 构建的插件运行基于 NET 3 5 构建的应用程序 您将需要重建 不完全正确 请检查更新 NET 3 5 应用程序以定位 NET 4 0 因为默认情况下它将在 NET 2 0 运行时启动 而该运行时将不支持该插件
  • 当我检查特定分支是否已提交时,为什么我的提交后挂钩条件语句不起作用?

    我通过 Windows 服务器上的 VisualSVN Server 运行 Subvbersion 并设置了一个主干和三个分支的存储库 分支是开发 测试和生产 我有一个提交后钩子 我想运行它在提交运行后更新工作副本 但我只希望它在提交是在开
  • Facebook iOS SDK 3.0 - 在 FBFriendPickerViewController 中保存并重新加载 .selection

    FBFriendPickerViewController 看起来非常简单 但是 它可能不适合我想要的场景 本质上 我想将用户选择的朋友列表保存到磁盘 在随后的应用程序启动时 我想将 FBFriendPickerViewController
  • 使用nodejs以块的形式发送数据

    我对 Nodejs 很陌生 正在开发 Angular 4 应用程序的后端 问题是后端生成响应的全部数据的速度相当慢 我想在数据可用时立即发送数据 我正在阅读有关 RxJS 的内容 但我真的不知道如何在节点中使用它 你能帮助我吗 也许您正在寻
  • 机器特定的 HttpWebResponse 超时

    我有一个非常奇怪的机器特定问题 在某些机器上 下面的代码可以工作 而在其他机器上 它会冻结 直到 GetResponse 调用引发超时异常 string url https myserver myimage png System Net S
  • 如何根据两列查找值(列值不唯一)

    这是我的数据 File1 Name School Age Weight Jack St John 15 Jack St Mary 14 Jack St Michael 12 Mary St John 16 Mary St Mary 12 M
  • 在闪亮的应用程序中使用bigrquery auth

    我想创建一个闪亮的应用程序 它利用 bigrquery 连接到 BigQuery API 并运行查询 我使用以下代码来执行查询 library bigrquery project lt PROJECT ID put your project
  • Google Sheet SUMIF 不是求和范围

    我试图根据行值大于 0 的条件对所有行求和 但是 该公式仅计算第一行并忽略范围的其余部分 我在另一个电子表格上遇到了这个问题 但我在一个新电子表格上隔离了这个问题 以便向您展示并提出问题 答案应该是 B1 5 美元 B2 15 美元 B3
  • 捕获 PyQt 中的任何异常

    我在 PyQt 中创建了一个 GUI 应用程序 我想与很多人分享 有时我会遇到意想不到的异常 并且我认为这是理所当然的 在每次异常之后我都会改进我的代码 并且它会变得越来越好 我使用记录器来记录这些异常 并使用 PyQt 静默异常的特殊钩子
  • 无法通过 Flutter 中的 API 调用呈现 DropdownMenu 中的数据

    我正在尝试在我的项目中创建一个下拉菜单 其中需要在列表中显示的数据源自 API 调用 其响应如下所示 但是 我收到以下错误消息 并且我不知道如何解决此问题 There should be exactly one item with Drop
  • 将 CString 转换为 CTime

    In 智能设备MFC应用 我已成功转换CTime to CString 现在我想把它转换回来 CString to CTime 我怎样才能做到这一点 Use COleDateTime ParseDateTime CString 然后将其转换
  • PrimeFaces 数据表滚动条位于所需位置

    当我添加新记录 在默认可视区域之外 并更新数据表时 我有一个包含 100 多条记录的可滚动数据表 数据表从记录 0 加载 而我需要前一个位置的数据表视图 我的数据表代码
  • App.xaml 的 EventSetter 上出现错误 CS1061

    我试图通过我的代码创建一个元素并为其关联一个样式 还关联其 EventSetter 该样式工作完美 但当我尝试运行该函数时它不起作用 App xaml
  • 窗函数的确定性排序顺序

    I ve a status表 我想获取最新的详细信息 Slno ID Status date 1 1 Pass 15 06 2015 11 11 00 this is inserted first 2 1 Fail 15 06 2015 1
  • 这是否需要显式同步?

    我有两个线程 我想确保我在 LinkedBlockingQueue 上正确执行同步 这是正确的吗 或者 messageToCommsQueue 上的显式同步不需要吗 宣言 private LinkedBlockingQueue