我有一個關於HashMap同步的問題。背景是我正在嘗試實施一種簡單的暴力檢測方法。我將使用以用戶名爲關鍵字的地圖,用於保存用戶失敗的登錄嘗試次數。如果登錄失敗,我想做的事情是這樣的:HashMap同步映射值增值
Integer failedAmount = myMap.get("username");
if (failedAmount == null) {
myMap.put("username", 1);
} else {
failedAmount++;
if (failedAmount >= THRESHOLD) {
// possible brute force detected! alert admin/slow down login
///or whatever
}
myMap.put("username", failedAmount);
}
我此刻心目中的機制是相當簡單:我只是在午夜跟蹤此全日和清除()HashMap中或類似的東西。
所以我的問題是: 什麼是最好的/最快的Map實現,我可以使用嗎?我需要一個完全同步的Map(Collections.sychronizedMap())還是一個ConcurrentHashMap是否足夠?或者甚至可能只是一個正常的HashMap?如果有幾個增量滑過,我想這不是什麼大問題?
你仍然需要一個同步的塊。 – aioobe 2012-03-02 16:42:26
你能解釋一下爲什麼嗎? – nwinkler 2012-03-02 16:43:43
Wooops。沒有看到putIfAbsent :)真正優雅的解決方案:) +1! – aioobe 2012-03-02 19:42:18