- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 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/
为什么 Sun 不使用 synchronized(this) 而不是 mutex = this 然后使用 synchronized(mutex) ? 我看不出他们所做的有什么好处吗?我错过了什么吗?
如何SynchronizedCollection和 System.Collections.Concurrent 中的并发集合命名空间彼此不同,除了 Concurrent Collections 是一个
有一个内部类 SynchronizedCollection - 在 java.util.Collections 里面有两个构造函数。第一个获取集合,另一个获取集合和互斥锁。前构造函数检查参数是否为空。
我在 Java 中使用 Collections.synchronizedCollection 来保护一个集合,我知道这个集合正在被许多线程同时访问。 Java API 警告: "用户在遍历返回的集合时
我指的是问题 here并使用作者代码示例,现在我的问题是 为什么作者使用synchronized(synchronizedMap),真的有必要吗,因为synchronizedMap总是确保没有两个线程
我试图在我的 C# 代码中包含以下行,但由于某种原因它被标记为错误: public SynchronizedCollection allImages = new Synchronize
SynchronizedCollection.Remove() 的 MSDN 文档( https://msdn.microsoft.com/en-us/library/ms619895(v=vs.11
我想知道是否有人知道为什么 SynchronizedCollection 类是在 ServiceModel 程序集中实现的。我看不到程序集名称和这个(相对)通用类之间的任何联系。 最佳答案 这个类非常
作为我上一篇文章的后续 Is iteration via Collections.synchronizedSet(...).forEach() guaranteed to be thread safe
我们可以对所有 Collections 类型的对象(如 Set 和 List)使用 Collections.synchronizedCollection(Collection c),这就是为什么我们有
.NET 4.0 引入了 System.Collections.Concurrent命名空间: "The System.Collections.Concurrent namespace provide
我是一名优秀的程序员,十分优秀!