深圳网站开发ucreator,宁德城乡建设网站,建立一个购物网站平台费用,百度优化排名转载自 java并发编程#xff08;二十一#xff09;----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合#xff1a;CopyOnWriteArraySet和ConcurrentSkipListSet。从名字上来看我们知道CopyOnWriteArraySet与上一节讲到的CopyOnWrit…转载自 java并发编程二十一----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合CopyOnWriteArraySet和ConcurrentSkipListSet。从名字上来看我们知道CopyOnWriteArraySet与上一节讲到的CopyOnWriteArrayList一样是动态数组实现;ConcurrentSkipListSet是线程安全的有序的集合适用于高并发的场景。下面我们深入细致的分析一下他们的用法。
CopyOnWriteArraySet简介
它是线程安全的无序的集合可以将它理解成线程安全的HashSet。对其所有操作使用内部 CopyOnWriteArrayList 的 Set。因此它共享以下相同的基本属性
它最适合于具有以下特征的应用程序set 大小通常保持很小只读操作远多于可变操作需要在遍历期间防止线程间的冲突。它是线程安全的。因为通常需要复制整个基础数组所以可变操作add、set 和 remove 等等的开销很大。 迭代器不支持可变 remove操作。使用迭代器进行遍历的速度很快并且不会与其他线程发生冲突。在构造迭代器时迭代器依赖于不变的数组快照。
我们看一下CopyOnWriteArraySet的类体
public class CopyOnWriteArraySetE extends AbstractSetE implements Serializable {private static final long serialVersionUID 5457747651344034263L;private final CopyOnWriteArrayListE al new CopyOnWriteArrayList();
}
该类有一个成员变量CopyOnWriteArrayList。CopyOnWriteArraySet其所有操作使用内部 CopyOnWriteArrayList 的 Set所以他的所有的方法其实都是引用了CopyOnWriteArrayList的方法来完成的。有关CopyOnWriteArrayList的使用说明我们在上一节里已经介绍的很详细有兴趣可以查看上一节里的源码介绍。
ConcurrentSkipListSet简介
ConcurrentSkipListSet是线程安全的有序的集合适用于高并发的场景。他是一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现。下面我们看一下方法体
public class ConcurrentSkipListSetEextends AbstractSetEimplements NavigableSetE, Cloneable, java.io.Serializable {private static final long serialVersionUID -2479143111061671589L;private final ConcurrentNavigableMapE,Object m;public ConcurrentSkipListSet() {m new ConcurrentSkipListMapE,Object();}}
(01) ConcurrentSkipListSet继承于AbstractSet。因此它本质上是一个集合。
(02) ConcurrentSkipListSet实现了NavigableSet接口。因此ConcurrentSkipListSet是一个有序的集合。
(03) ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的。它包含一个ConcurrentNavigableMap对象m而m对象实际上是ConcurrentNavigableMap的实现类ConcurrentSkipListMap的实例。ConcurrentSkipListMap中的元素是key-value键值对而ConcurrentSkipListSet是集合它只用到了ConcurrentSkipListMap中的key
由源码中我们能看到ConcurrentSkipListSet内部所有操作都是在内部由ConcurrentSkipListMap完成。本节我们先不介绍ConcurrentSkipListMap下节讲到map的时候再细说。