gpt4 book ai didi

Java并发问题——在一个集合上同步

转载 作者:行者123 更新时间:2023-11-29 09:46:28 24 4
gpt4 key购买 nike

以下同步 ArrayList 的代码片段能否在多线程环境中工作?

class MyList {
private final ArrayList<String> internalList = new ArrayList<String>();

void add(String newValue) {
synchronized (internalList) {
internalList.add(newValue);
}
}

boolean find(String match) {
synchronized (internalList) {
for (String value : internalList) {
if (value.equals(match)) {
return true;
}
}
}

return false;
}
}

我担心一个线程无法看到另一个线程的更改。

最佳答案

您的代码可以工作并且是线程安全的但不是并发的。您可能需要考虑使用 ConcurrentLinkedQueue 或其他并发线程安全数据结构,如 ConcurrentHashMap 或 notnoop 建议的 CopyOnWriteArraySet 并使用 contains 方法。

class MyList {
private final ConcurrentLinkedQueue<String> internalList =
new ConcurrentLinkedQueue<String>();

void add(String newValue) {
internalList.add(newValue);
}

boolean find(String match) {
return internalList.contains(match);
}
}

关于Java并发问题——在一个集合上同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016511/

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