2017-04-11 29 views
0

我有75个以上的请求,他们每个人都试图更新或访问一个地图。如果我在更新MAP时使用同步代码块。那可能会导致性能问题。如何避免此情况下的同步?

请建议备用方式同时更新MAP,75+个请求。

注:我试图在Java中实现上述想法。

+0

建议好吧,如果你想有一个线程安全的地图,你将有性能问题,因为它不能同时多次访问。 – BackSlash

回答

1

有解决这一问题的多种方式,看看你最适合:

SynchronizedMap 的ConcurrentHashMap

如果您使用的ConcurrentHashMap将它作为请求的数量,你可以更好地增加,你不会看到任何性能超载。在ConcurrentHashMap的特定部分获取ConcurrentHashMap锁的情况下。这意味着如果两个线程试图分别访问两个不同的部分,他们可以不用等待。

1

尝试使用concurrent hash map。基本上它把你的散列图分成较小的范围,而不是把锁放在整个地图上,它只有在较小的范围内才有锁。

如果您使用HashMap的synchronized块,它会把锁完整HashMap和2号写操作可以同时进行。但是,如果您使用并发哈希映射,并且如果您有两个写入操作在不同范围内写入,则两者可以同时进行。

请用它来获得更好的了解之前参考how concurrent hash map works

编辑: - 请阅读性能增益hashmap vs concurrenthashmap在这里的单线程和多线程应用Performance ConcurrentHashmap vs HashMap

1

这是不太可能在同一时间75页左右的请求会导致访问Map同时不同方式之间的任何显着的性能差异。最重要的是代码的简单性和可维护性。 java.util.ConcurrentHashMap不太可能在您所描述的规模上显示其性能优势,但与其他解决方案一起使用要容易得多,您会注意到这一优势。

0

我将添加一些额外的视角以及ConcurrentHashMap的现有答案。如果许多请求类型的阅读和极少数的请求是更新请求,那么你可以看看java.util.concurrent.locks.ReadWriteLock。它允许多个线程一次读取资源,但只能写入一个资源。如果更新请求是多,那么你可以使用的ConcurrentHashMap在以前的答案

相关问题