簡體   English   中英

Java + 我可以使用 ConcurrentHashMap 來處理 100k 並發請求嗎?

[英]Java + can I use ConcurrentHashMap to handle 100k concurrent request?

我正在開發自定義 i18N 庫。 在那,我開發了一個函數,用於根據輸入國家和語言獲取語言環境對象。 我不想為每個請求初始化語言環境對象。 我可以使用ConcurrentHashMap來存儲 Locale 對象嗎? ConcurrentHashMap可以處理 100k 並發請求嗎?

假設您使用的 Java 版本早於 8 ,如果您想最大化ConcurrentHashMap的並發級別,您需要:

  1. 使用構造函數ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)創建您的ConcurrentHashMap實例,以便設置與要使用的段總數相對應的concurrencyLevel ,知道默認情況下它是 16,並明智地選擇它,因為使用明顯更高的值比您需要的值會浪費空間和時間,而明顯較低的值會導致線程爭用。
  2. 正確實現密鑰的hashCode()方法,以便在不同的段上盡可能地分發您的條目。

Java 8 中,已經完全審查了ConcurrentHashMap的實現,因此您不再有段, concurrencyLevel現在僅用作調整大小的提示,因此 #1 不再真正需要,但 #2 仍然是一個很好的做法.

ConcurrentHashMap 是一種非常高效的數據結構。 您可以從它開始,並測量/測試性能以確保它足以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM