fba*_*ahr 12 java collections concurrency hashset thread-safety
显然,有两种方法可以HashSet使用Java的CollectionsAPI 获取线程安全的实例.
Pet*_*rey 25
你可能想到的是
Set<Type> set = Collections.newSetFromMap(new ConcurrentHashMap<Type, Boolean>());
Run Code Online (Sandbox Code Playgroud)
这支持并发更新和读取.它的迭代器不会抛出ConcurrentModicationException.在哪里
Set<Type> set = Collections.synchronizedSet(new HashSet<Type());
Run Code Online (Sandbox Code Playgroud)
重量更轻,但一次只允许一个线程访问该组.如果你想要迭代它,你需要明确地锁定集合,如果不以安全的方式更新它,你仍然可以获得CME(同时迭代它)
第一个返回一个Set,它基本上具有与作为参数传递的映射相同的线程安全性和性能保证.如果映射不是线程安全的,则该集合也不是.您通常使用此方法从并发映射创建并发集,因为API中没有ConcurrentHashSet.
第二个返回给定集合的代理,其所有方法都已同步.
| 归档时间: |
|
| 查看次数: |
9857 次 |
| 最近记录: |