gpt4 book ai didi

java - synchronizedCollection 和 contains——我需要手动同步吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:41 25 4
gpt4 key购买 nike

我在 Java 中使用 Collections.synchronizedCollection 来保护一个集合,我知道这个集合正在被许多线程同时访问。 Java API 警告:

"用户在遍历返回的集合时必须手动同步它:

Collection c = Collections.synchronizedCollection(myCollection);
...
synchronized(c) {
Iterator i = c.iterator(); // Must be in the synchronized block
while (i.hasNext())
foo(i.next());
}

如果我使用 c.contains(obj),它是线程安全的吗?在内部,显然,这是在 Collection 上迭代并查看其中是否有任何对象等于 obj。我的直觉是假设这可能是同步的(如果不是的话,这似乎是一个重大失败),但考虑到以前同步的痛苦,仔细检查似乎是明智的,并且谷歌搜索关于这个的答案还没有转向什么都可以。

最佳答案

就其本身而言,对contains 的调用是安全的。

问题是人们经常测试一个集合是否包含一个元素然后根据结果对集合做一些事情。

最有可能的是,测试和操作应该被视为单个原子操作。在这种情况下,应该获取集合的锁,并且两个操作都应该在 synchronized block 中执行。

关于java - synchronizedCollection 和 contains——我需要手动同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158931/

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