Java +我可以使用ConcurrentHashMap来处理100k并发请求吗?

时间:2016-10-05 11:55:30

标签: java

我正在开发自定义i18N库。在那里,我开发了一个函数来获取语言环境对象作为输入国家和语言。 我不想为每个请求初始化语言环境对象。我可以使用ConcurrentHashMap存储Locale对象吗? ConcurrentHashMap可以处理100k并发请求吗?

2 个答案:

答案 0 :(得分:2)

假设你使用早于8的Java版本,如果你想最大化ConcurrentHashMap的并发级别,你需要:

  1. 使用构造函数ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)创建ConcurrentHashMap的实例,以便设置与要使用的段总数相对应的concurrencyLevel,因为默认情况下它是16并明智地选择它因为使用比你需要的值更高的值会浪费空间和时间,而显着更低的值可能导致线程争用。
  2. 正确实施密钥的方法hashCode(),以便在不同的细分中尽可能地分配您的条目。
  3. Java 8 中,ConcurrentHashMap的实施已完全审核,因此您不再拥有细分,concurrencyLevel现在用作尺寸提示仅此而已#1不再需要,但#2仍然是一个很好的做法。

答案 1 :(得分:0)

ConcurrentHashMap是一个非常有效的数据结构。您可以从它开始,测量/测试性能以确保它足够您。