gpt4 book ai didi

Java map 同步

转载 作者:行者123 更新时间:2023-12-01 08:06:10 26 4
gpt4 key购买 nike

我正在做一些定义了 Collections.synchronizedMap 的事情。

在一个线程 A 中,它只会获取值,并放置更新的值,因此这不是问题。

在另一个线程B中,它将迭代条目,然后根据条目的值进行一些比较,如果符合某些条件,则会从映射中删除该条目。

我的理解是同步的 map 会阻止访问。

但是有可能线程 B 获取一个条目,然后线程 A 更新该值,然后线程 B 删除该值,因为它符合某些条件,但由于线程 A 更新了它的值,所以它不应该删除该值。解决这个问题的最佳实现是什么?

最佳答案

听起来你只需要同步“获取、检查和删除”部分。例如:

Iterable<String> keys;
synchronized (map) {
keys = new ArrayList<>(map.keySet());
}
for (String key : keys) {
synchronized (map) {
Integer value = map.get(key);
// The other thread won't be able to update the value at this point
if (value != null && value < 0) {
map.remove(key);
}
}
}

您的更新线程可能需要执行相同的操作 - 从您的描述中不清楚它是否需要“查看”删除。

关于Java map 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416780/

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