0
我試圖用ConcurrentHashMap創建一個具有以下行爲的方法。使用ConcurrentHashMap進行多線程
- 閱讀
- 寫鎖
- 事先書面無鎖,
- 閱讀,看是否存在記錄,
- 如果仍然不存在,保存到數據庫,並添加記錄映射。
- 如果記錄存在以前的寫入,只需返回記錄。
我的想法。
private Object lock1 = new Object();
private ConcurrentHashMap<String, Object> productMap;
private Object getProductMap(String name) {
if (productMap.isEmpty()) {
productMap = new ConcurrentHashMap<>();
}
if (productMap.containsKey(name)) {
return productMap.get(name);
}
synchronized (lock1) {
if (productMap.containsKey(name)) {
return productMap.get(name);
} else {
Product product = new Product(name);
session.save(product);
productMap.putIfAbsent(name, product);
}
}
}
有人能幫我理解這是否是一種正確的方法嗎?
一是想我說謝謝,但我有幾個問題,以確保我完全理解其中的邏輯。 1.如果在每次調用putIfMissing時實例化Product,是否會創建不必要的垃圾收集?我會在很短的時間內調用這個方法數百萬次,會造成任何不必要的垃圾收集? 2.如果它實際上是一個新產品,產品價值是否會與持久對象一起更新,以便它可用於調用putIfMissing的所有對象? 3.當產品已經存在時,究竟傳遞給session.save的是什麼?謝謝 –