> 文章列表 > 高并发中的集合类

高并发中的集合类

高并发中的集合类

高并发中的集合类

  • 第一代线程安全集合类
  • 第二代线程非安全集合类
  • 第三代线程安全集合类

第一代线程安全集合类

Vector、Hashtable
是怎么保证线程安全的,使用synchronized修饰方法。
缺点:效率低下

第二代线程非安全集合类

ArrayList、HashMap
线程不安全,但是性能好,用来替代Vector、Hashtable
使用ArrayList、HashMap,需要线程安全怎么办?
使用Collections.synchronizedList(list); Collections.synchronizedMap(m);

其内部使用的还是synchronized代码块,它没有使用juc新的锁,所以它的效率在当时来说也是偏低。现在对synchronized内部做了一个锁升级的过程,从偏向锁到自旋锁到轻量级锁到重量级锁的一个默认的锁升级过程。和第三代线程安全集合类相比,效率上会有所提升但依然不够灵活。

第三代线程安全集合类

主要使用的是CAS(实现自旋锁的基础),底层大多数时间是使用AQS。

【补充】:
AQS全称是AbstractQueuedSynchronizer,它是J.U.C包中Lock锁的底层实现,可以用它来实现多线程的同步器。

在大量并发情况下如何提高集合的效率和安全呢?
java.util.concurrent.*
ConcuttentHashMap;
CopyOnWriteArrayList;
CopyOnWriteeArraySet; 注意 不是CopyOnWriteHashSet*
底层大都采用Lock锁 (1.8的ConcurrentHashMap不使用Lock锁),保证安全的同时,性能也很高。

List、Set、Queue、Map需要了解。

参考资料:【5分钟背八股】96:高并发中的集合有哪些问题