JAVA多线程——并发数据结构

Java中的传统数据结构如ArrayList和HashMap在多线程环境下可能存在线程安全问题。为解决这一问题,Java提供了线程安全的并发数据结构,如Vector、CopyOnWriteArrayList和ConcurrentHashMap等。这些数据结构分为阻塞式和非阻塞式,其中CopyOnWriteArrayList适用于读多写少的场景,而ConcurrentHashMap则在读多写少的情况下表现出良好的性能。此外,队列如ConcurrentLinkedQueue和ArrayBlockingQueue也是并发编程中的重要组件。
摘要由CSDN通过智能技术生成

传统数据结构的问题

常用的数据结构,诸如HashMap, ArrayList, HashSet都是非同步的,当多个线程进行读写,可能会抛出异常或数据错误,因此是线程不安全的。但是Java里面陈旧线程安全的数据结构,诸如HashTable, Vector, StringBuffer等,性能过差。因此J.U.C实现了一些新的同步数据结构,它们主要分为两类:

  • 阻塞式集合: 当集合为空或满时,等待
  • 非阻塞式集合: 当集合为空或满时,不等待,直接返回null或者异常

并发数据结构包括的类型

List类

  • Vector: 同步安全,写多读少
  • ArrayList:不安全
  • Collection.SynchronizedList(List list) :可以把一个线程不安全的List变成线程安全的,但是使用Synchronized效率较低
  • CopyOnWriteArrayList,:Java5提供的线程安全的列表类,基于复制机制,非阻塞,适合用于读多写少的场景,性能较好

Set类

  • HashSet 不安全
  • Collection.SynchronizedSet(Set set): 同上,效率低
  • CopyOnWriteArraySet࿱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值