每个键在多个JVM上以原子方式更新整数

Abh*_*wal 6 java multithreading

我们有一个要求,可以缩小问题的范围.

  • 有多个键,每个键映射到一个整数.
  • 当在JVM上接收到密钥时,您需要从共享内存中检索int值,将其递增,然后将递增的值重新放回共享内存.

因此,当两个JVM或两个线程读取相同的值时,其中一个的更新应该一致地失败,这样您就不会丢失任何JVM上的任何线程所做的任何增量.

一旦更新失败,您将再次从共享内存中读取,增加它,然后再次更新,直到更新成功或您已经用尽了一些'N'次重试.

现在我们使用带有乐观锁定的infinispan,但行为不一致.请找到该主题的链接.

https://developer.jboss.org/message/914490

是否还有其他技术可以满足这一要求.

kiw*_*ron 1

线程之间的同步很容易,但 JVM 之间的同步却极其困难,特别是当您需要支持多个平台时。我建议使用以下方法之一集中更新代码,这两种方法都“外包”数据更新任务:

  • 从知道如何执行更新任务的单个进程发布一个简单的 REST API,并序列化请求。
  • 使用关系数据库来保存计数,并确保客户端代码在事务不成功时正确回滚事务。

可能不是您想听到的,但这两种方法都可以很好地发挥作用。