gpt4 book ai didi

java - 确保当一个线程更新 map 时,另一个线程将看到此更新的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-02 06:55:42 25 4
gpt4 key购买 nike

我需要有多个在共享 java.util.HashMap 上运行的线程。

它们中的每一个都将执行单个读取和写入操作(即没有一个将使用批量操作,例如 putAll()),并且我想确保不会丢失更新。

同步写入能保证安全吗?如果我做这样的事情:

writeLock.lock();
double latestValue = map.get(key);
map.put(key, latestValue + diff);
writeLock.unlock();

这足以避免丢失更新吗?同样的方法足以实现可重复读取吗?

而且,如果我使用 ConcurrentHashMap,我可以安全地摆脱我的吗?

UPD:如果我从 HashMap 切换到 ConcurrentHashMap,内存使用是否有任何线性开销?

最佳答案

在同步块(synchronized block)中或获取锁后进行更新并不能保证您会看到最新的值。要查看更新/新值,您还需要锁定阅读。

// while writing
lock.lock();
try {
map.put(key, value);
}finally {
lock.unlock();
}

// while reading
lock.lock();
try {
map.get(key);
}finally{
lock.unlock()
}

是的,ConcurrentHashMap 最适合您的目的。而且你也不需要锁。

关于java - 确保当一个线程更新 map 时,另一个线程将看到此更新的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com