我有一张如下所示的地图......
关键价值
23 20
32 20(20 + 20 = 40,min = 23 max = 32)
43 18
45 24(24 + 18 = 42,因为42> 40所以这里min和max将是相同的43
47 10
56 6(24 +10 +6 = 40)所以这里min = 45,max = 56
49 2
47 12
如上所示,将有一个名为split的最终常量,其值为40
final int SPLIT = 40; //这将是可配置的,因为它可以更改值。
因此,如果地图的值达到40,我必须实现逻辑 然后是计算开始的地图的第一个键,并且键入到40wilkl的确切位置,因为min和max也在上面说明了
除了这种关注需要采取\和如果总和达到40以上那么我们必须忽略它并将前一个值本身作为min amd max,在最小情况下min和max将是相等的。
请告知如何通过地图中的java实现相同的目标
答案 0 :(得分:3)
我会重新设计你的应用程序,因此它不需要全局锁定。实现您的系统,这样只有一个JVM需要锁定,而每个其他JVM都与它进行对话,并且需要它。
有许多替代方案,使用ServerSocket,文件锁,数据锁,但恕我直言,这些更难以正确或有效。
答案 1 :(得分:0)
您将不得不依赖于用于在不同进程之间同步/通信的技术,而不是不同的JVM线程。 看一下这个主题:Any concept of shared memory in Java
答案 2 :(得分:0)
有几个框架可以为您服务,
通常,您需要使用跨JVM的共享数据结构(即群集)。
我建议举例来检查以下框架之一:
A. Infinispan - 它为您提供共享数据网格,但也有缓存(例如驱逐策略)策略
B. EHCache - 分布式缓存
我建议你确保你的应用程序与缓存/数据网格实现松散耦合 - 例如使用这种方法:
Map<String,Integer> sharedJvmMap = SharedMapBuilderFactory.instance().getBuilder().createSharedMap();
并有一个构建器层次结构,为您创建共享映射。
建造者可以看起来像:
public interface SharedMapBuilder {
<K,V> Map<K,V> createSharedMap();
}
例如,对此类有一个infinispan实现,并且有一些配置文件定义您使用此构建器。
另一个选择是注入适当的构建器(使用Spring,Juice或任何DI容器)。
这样,您的应用程序代码就不会知道共享映射的内部实现。