并发ConcurrentSkipListSet与线程安全Collections.SynchronizedSet()区别
内容提要
ConcurrentSkipListSet是SortedSet的并发版本,使用并发跳转列表作为底层数据结构。它允许多个线程同时访问集合,不会锁定整个集合,不允许空元素,保留元素顺序,并提供按排序顺序浏览集合的方法。Collections.SynchronizedSet()是返回同步或线程安全集合的方法,锁定整个集合,允许空元素,不保留元素顺序,不提供按排序顺序浏览集合的方法。ConcurrentSkipListSet的迭代器是弱一致性的,不会抛出ConcurrentModificationException异常,而SynchronizedSet可能会。选择使用ConcurrentSkipListSet还是SynchronizedSet取决于需求。ConcurrentSkipListSet性能更好,不会抛出ConcurrentModificationException异常。
关键要点
-
ConcurrentSkipListSet是SortedSet的并发版本,使用并发跳转列表作为底层数据结构。
-
ConcurrentSkipListSet允许多个线程同时访问集合,不会锁定整个集合。
-
ConcurrentSkipListSet不允许空元素,保留元素顺序,并提供按排序顺序浏览集合的方法。
-
Collections.SynchronizedSet()返回同步或线程安全集合,锁定整个集合,允许空元素,不保留元素顺序。
-
ConcurrentSkipListSet的迭代器是弱一致性的,不会抛出ConcurrentModificationException异常。
-
选择使用ConcurrentSkipListSet还是SynchronizedSet取决于需求,前者性能更好。
-
ConcurrentSkipListSet允许多个线程并行访问,而SynchronizedSet会阻塞多个线程的并行访问。
-
ConcurrentSkipListSet提供按排序顺序浏览集合的其他方法,如first()、last()等。
-
SynchronizedSet()不提供按排序顺序浏览集合的其他方法,除非后备集提供。
-
在选择ConcurrentSkipListSet和SynchronizedSet时,考虑性能和线程安全的需求。