gpt4 book ai didi

java - 同步访问两个不同的对象

转载 作者:行者123 更新时间:2023-12-01 23:38:14 29 4
gpt4 key购买 nike

我必须搜索一个对象:首先在 BlockingQueue 中,如果它不存在,那么我需要在 ConcurrentHashMap 中搜索并需要执行一些操作。这需要是线程安全的。

下面的代码可以吗? ConcurrentHashMap 上的同步是否按预期工作?

synchronized(blockingQueue){
if(!blockingQueue.contains(element)) {
synchronized(concurrentHashMap) {
//do something
}
}
}

最佳答案

首先,像您的示例中那样进行同步可能不会达到您的预期。您必须检查这两个集合的实现,并检查它们是否自行同步,而不是任何其他内部对象。

如果您需要像这样同步访问,我认为使用同步集合是一个坏主意。显然,您的关键部分比简单的读/写操作更复杂。考虑对操作使用自定义锁,如下所示:

final Object lock = new Object();

public void addDataToHashMap(Object param, Object val) {
synchronized(lock) {
concurrentHashMap.put(param, val);
}
}

public void performComplexOperations() {
synchronized (lock) {
if (!blockingQueue.contains(element)) {
processSomeData(concurrentHashMap);
}
}
}

关于java - 同步访问两个不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329784/

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