concurrency相关内容

Java 1.4 同步:只允许一个方法实例运行(非阻塞)?

我有一堂课建议翻译实用程序.翻译本身应每 30 分钟重新加载一次.我为此使用 Spring Timer 支持.基本上,我的课看起来像: 公共接口翻译器{公共无效负载翻译();公共字符串getTranslation(字符串键);} loadTranslations() 运行时间可能很长,因此在运行时旧的翻译仍然可用.这是通过在本地地图中加载翻译并在加载所有翻译时更改参考来完成的. 我的问题 ..
发布时间:2022-01-22 20:41:42 Java开发

Java 的 final 字段值的“最新"保证是否扩展到间接引用?

Java 语言规范在 中定义了 final 字段的语义第 17.5 节: final 字段的使用模型很简单.在该对象的构造函数中设置对象的最终字段.在对象的构造函数完成之前,不要在另一个线程可以看到它的地方写对正在构造的对象的引用.如果遵循这一点,那么当另一个线程看到该对象时,该线程将始终看到该对象的最终字段的正确构造版本.它还将看到至少与最终字段一样最新的最终字段引用的任何对象或数组的版本 ..
发布时间:2022-01-22 20:33:52 Java开发

如何同步访问 NAS 上的文件的两个进程?

事情是这样的:我有两个应用程序,用 C++ 编写并在两台具有不同操作系统(一台 Linux 和一台 Windows)的机器上运行.其中一个过程负责更新 NAS(网络附加存储)上的 XML 文件,而另一个则读取该文件. 是否可以同步这两个进程以避免在修改文件的同时读取文件? 解决方案 您可以在服务器上创建一个锁文件,该文件在您执行写入之前创建,等待然后写入并在完成时删除.让读取过程检查 ..
发布时间:2022-01-22 20:26:22 C/C++开发

线程池程序在更快的服务器上运行得更慢

upd 我现在认为我的问题的根源不是“线程",因为我观察到我的程序的任何一点都变慢了.我认为不知何故,当使用 2 个处理器时,我的程序执行速度较慢,可能是因为两个处理器需要相互“通信".我需要做一些测试.我将尝试禁用其中一个处理器,看看会发生什么. ====================================== 我不确定这是否是 C# 问题,可能更多的是关于硬件,但我认为 ..
发布时间:2022-01-22 20:24:40 C#/.NET

如何解决用于在 C++ 中维护静态局部变量的服务数据的线程安全问题?

考虑以下场景.我们有一个带有静态局部变量的 C++ 函数: 空函数(){静态 int 变量 = 获得();//废话} 该函数需要从多个线程并发调用,所以我们添加一个临界区来避免对静态本地的并发访问: void functionThreadSafe(){CriticalSectionLockClass 锁(criticalSection);静态 int 变量 = 获得();//废话} 但这足 ..
发布时间:2022-01-22 20:24:27 C/C++开发

java在不同的线程中访问一个对象

我搜索了很多,但找不到特定的解决方案.在stackoverflow上也有一些关于此的问题,但我无法找到令人满意的答案,所以我再次询问. 我在 java 中有一个类如下.我知道如何在 java 中使用线程. //如果有打印错误请不要考虑语法,因为我输入代码只是为了在我的脑海中展示这个概念公共课我的课{私有列表mylist=new ArrayList();公共添加字符 ..
发布时间:2022-01-22 20:13:58 Java开发

使用 ConcurrentMap 进行双重检查锁定

我有一段代码可以由多个线程执行,它需要执行 I/O 绑定操作以初始化存储在 ConcurrentMap 中的共享资源.我需要使这个代码线程安全并避免不必要的调用来初始化共享资源.这是错误的代码: private ConcurrentMap地图;//.....字符串键 = "somekey";资源资源;if (map.containsKey(key)) {资源 = map.get(key);} ..

Prevayler 的同步策略是什么?

Prevayler 保证所有写入(通过其事务)都是同步的.但是阅读呢? 如果不使用显式同步(在用户代码中),脏读是可能的吗? 如果业务对象被读取为: //获取第三个账号账户账户 = (Bank)prevayler.prevalentSystem().getAccounts().get(2); ? 如果是这样,哪些同步策略对用户代码有利? (假设一个业务对象 A 包含一个 ..
发布时间:2022-01-22 20:13:14 Java开发

在 Java 中使用 synchronized (Thread.currentThread()){...} 的目的是什么?

我在我们的项目中遇到了以下代码: 同步的 (Thread.currentThread()){//一些代码} 我不明白在 currentThread 上使用同步的原因. 有什么区别 同步的 (Thread.currentThread()){//一些代码} 只是 //一些代码 你能举个例子说明区别吗? 更新 更详细的这段代码如下: 同步的 (Thread.current ..

Java中哪些情况需要同步方法访问?

在什么情况下需要同步对实例成员的访问?我知道对类的静态成员的访问总是需要同步 - 因为它们在类的所有对象实例之间共享. 我的问题是,如果我不同步实例成员,我什么时候会出错? 例如,如果我的班级是 公共类 MyClass {私有 int instanceVar = 0;公共 setInstanceVar(){实例变量++;}公共 getInstanceVar(){返回实例变量;}} ..
发布时间:2022-01-22 20:08:52 Java开发

在java中同步一个对象,然后更改同步变量的值

我遇到了这样的代码 同步(obj){obj = 新对象();} 感觉有些不对劲,我无法解释,这段代码是OK还是真的有什么问题,请指出.谢谢 解决方案 这可能不是你想做的.您正在对不再持有引用的对象进行同步.考虑另一个运行此方法的线程:在对 obj 的引用被更新为指向新对象之后,它们可能会进入并尝试锁定.那时,它们正在与第一个线程不同的对象上进行同步.这可能不是您所期望的. 除非您 ..
发布时间:2022-01-22 19:59:12 Java开发

如何获得废弃的 boost::interprocess::interprocess_mutex 的所有权?

我的场景:一台服务器和一些客户端(虽然不多).服务器一次只能响应一个客户端,因此必须排队.我正在使用互斥锁 (boost::interprocess::interprocess_mutex) 来执行此操作,并包裹在 boost::interprocess::scoped_lock 中. 问题是,如果一个客户端在持有互斥锁时意外死亡(即没有析构函数运行),其他客户端就会遇到麻烦,因为它们正在等 ..
发布时间:2022-01-22 19:56:06 C/C++开发

LinkedBlockingQueue 的插入和删除方法是线程安全的吗?

我在两个不同的线程之间使用 LinkedBlockingQueue.一个线程通过add添加数据,而另一个线程通过take接收数据. 我的问题是,我是否需要同步访问 add 和 take.LinkedBlockingQueue 的插入和删除方法是线程安全的吗? 解决方案 是的.来自文档: "BlockingQueue 的实现是线程安全的.所有排队方法使用原子地实现它们的效果内部锁 ..
发布时间:2022-01-22 19:54:24 Java开发

同步静态方法在 Java 中是如何工作的,我可以用它来加载 Hibernate 实体吗?

如果我有一个带有静态方法的 util 类,它将调用 Hibernate 函数来完成基本数据访问.我想知道使方法 synchronized 是否是确保线程安全的正确方法. 我希望这可以防止对同一数据库实例的信息访问.但是,我现在确定以下代码是否会阻止在特定类调用 getObjectById 时为所有类调用它. 公共类 Utils {public static synchronized Obj ..
发布时间:2022-01-22 19:44:37 Java开发

嵌套的 Java 8 并行 forEach 循环执行不佳.这种行为是预期的吗?

注意:我已经在另一篇 SO 帖子中解决了这个问题 - 在嵌套的 Java 8 并行流操作中使用信号量可能会出现死锁.这是一个错误吗? - 但这篇文章的标题表明问题与信号量的使用有关 - 这有点分散了讨论的注意力.我创建这个是为了强调嵌套循环可能存在性能问题——尽管这两个问题可能有一个共同的原因(也许是因为我花了很多时间来解决这个问题).(我不认为它是重复的,因为它强调了另一种症状 - 但如果你确实 ..
发布时间:2022-01-22 10:09:49 Java开发

Cocos2d 和并发:如何正确停止场景之间的动画

我有一个 GameScene(这里称为 ShooterScene),然后我退出到 MainMenu.我确实使用加载到纹理缓存中的精灵表.有各种动画正在进行(背景元素、敌人、玩家等......).几个月来,我遇到了一个问题,即 Enemies 的“setTexture"方法断言失败.我通过在替换场景之前暂停共享 CCDirector 解决了这个问题.这具有停止动画的效果.但是我只部分解决了这个问题. ..

生产者/消费者 - 生产者将数据添加到集合而不阻塞,消费者批量消费来自集合的数据

我有一个有点不寻常的生产者/消费者用例.我有一些生产者的真实用例,我希望他们能够将对象添加到集合中而不会阻塞.消费者(只有一个)应该阻塞,直到集合中有一定数量的对象可用(例如 500),然后批量消费它们.虽然少于 500 个,但它应该阻塞并等待集合填满.我不介意队列是否在短时间内超过此值(700、1000 等). 我目前似乎没有找到解决这个确切问题的解决方案.我正在考虑使用 Concurre ..
发布时间:2022-01-21 12:33:11 Java开发