并发ConcurrentSkipListSet与线程安全Collections.SynchronizedSet()区别
💡
原文中文,约3900字,阅读约需10分钟。
📝
内容提要
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时,考虑性能和线程安全的需求。
➡️