我打算創建一個實時計數器。所以一個用戶可以增加特定密鑰的計數器值。而另一個通過ajax請求獲得更新的計數值(在循環中或使用某種長輪詢方法)。我將使用一個春天控制器,它會注入服務類我可以這樣做以下,或是否有更好的辦法:在彈簧服務類的所有實例之間共享一個哈希映射實例
@Service
public MyService{
//instance variable in spring injected service class, not sure if this correct
static final Map<String, Integer> myMap;
public void add(String key){
Integer count = myMap.get(key);
count++;
myMap.put(key, count);
}
//accessed via ajax loop (and controller), if value changes update display
public Integer getCount(String key){
return myMap.get(key)
}
@PostConstruct
public load(){
myMap = new HashMap<String, Integer>(10){{//initialize}};
}
編輯有幾個答案,但目前尚不清楚這是最好:同步添加方法?在另一個類(註釋存儲庫)創建地圖並注入?還有別的嗎?
我已經編輯了輕微probs,但什麼是解決「多個線程訪問的地圖,沒有任何形式的同步,這將導致錯誤,不穩定的行爲,或例外」 – NimChimpsky
可能是最好的辦法使用ConcurrentHashMap – Subin
在實際應用程序中,除了主線程可以訪問共享資源(特別是在Web應用程序中)之外,所以一個可以使用「key」鍵將對象A置入,而另一個線程將插入對象B 「鑰匙」鍵。在映射的情況下,您可以使用[java.util.concurrent.ConcurrentHashMap](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html)來管理這些問題。 –