并发集合

可用

CopyOnWriteArrayList

对给定集合的addsetremove操作会导致创建内部数组的新副本。这确保我们不会捕获ConcurrentModificationException

请记住,在复制数组时,只会复制对对象的引用,包括对非线程安全元素字段的访问。此类集合最适用于写入操作最少的情况。

CopyOnWriteArrayList<E>是ArrayList 的线程安全模拟,基于 CopyOnWrite 算法实现。其他方法和构造函数如下所述:

CopyOnWriteArrayList(E[] toCopyIn) 将数组作为输入的构造函数。
int indexOf(E e, int index) 返回找到的第一个元素的索引,从给定索引开始。
int lastIndexOf(E e, int index) 返回在反向搜索中找到的第一个元素的索引,从给定索引开始。
布尔 addIfAbsent(E e) 如果元素不在集合中,则添加一个元素。equals方法用于比较元素。
int addAllAbsent(Collection<? extends E> c) 如果元素不在集合中,则添加元素。返回添加的元素数。

ConcurrentMap 接口

改进了HashMapTreeMap的实现,支持多线程和可扩展性。

ConcurrentMap<K, V>是一个通过附加原子操作扩展Map 的接口。

V putIfAbsent(K 键, V 值) 仅当键不在集合中时才添加新的键值对。返回给定键的先前值。
布尔删除(对象键,对象值) 仅当给定键与 Map 中的给定值匹配时才删除键值对。如果元素已成功删除,则返回 true。
布尔替换(K 键,V 旧值,V 新值) 仅当旧值与 Map 中的给定值匹配时,才通过键将旧值替换为新值。如果该值已被新值替换,则返回 true。
V 替换(K 键,V 值) 仅当键与任何值相关联时,才通过键将旧值替换为新值。返回给定键的先前值。

ConcurrentHashMap<K, V> - 此处数据以分段的形式呈现,分段分为键哈希。结果,如果您需要访问,则段被锁定,而不是对象。迭代器不会抛出ConcurrentModificationException并表示特定时间段内的数据。

ConcurrentHashMap 的实现

ConcurrentHashMap<K, V> - 此处数据以段的形式呈现,按键哈希分解。结果,数据访问被段锁定,而不是被一个对象锁定。此外,迭代器表示特定时间片的数据并且不会抛出ConcurrentModificationException

ConcurrentNavigableMap<K,V> - 扩展NavigableMap接口并返回一个 ConcurrentNavigableMap。所有迭代器都可以安全使用,不会抛出ConcurrentModificationException

ConcurrentSkipListMap<K, V>是用于多线程的TreeMap 的模拟。数据按键排序,并保证containsKeygetputremove和其他类似操作的平均 log(N) 性能。

ConcurrentSkipListSet<E>是基于ConcurrentSkipListMap的Set接口的实现。

1
任务
模块 3,  第 19 级课程 2
已锁定
10 plus 20 equals 20
task4203
1
任务
模块 3,  第 19 级课程 2
已锁定
Thread-unsafe Map
task4204
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论