轩辕李的博客 轩辕李的博客
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

轩辕李

勇猛精进,星辰大海
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java

    • 核心

    • 并发

      • Java并发-线程基础与synchronized关键字
      • Java并发-重入锁ReetrantLock的使用
      • Java并发-信号量Semaphore
      • Java并发-读写锁ReadWriteLock
      • Java并发-倒计时器CountDownLatch
      • Java并发-栅栏CyclicBarrier
      • Java并发-LockSupport线程阻塞工具类
      • Java并发-线程池ThreadPoolExecutor
      • Java并发-阻塞队列BlockingQueue
      • Java并发-以空间换时间之ThreadLocal
      • Java并发-无锁策略CAS与atomic包
      • Java并发-JDK并发容器
        • 旧时代的同步容器
        • 新时代的并发容器
        • 分布式集合
        • 总结
      • Java并发-异步调用结果之Future和CompletableFuture
      • Java并发-Fork Join框架
      • Java并发-调试与诊断
    • 经验

    • JVM

    • 企业应用

  • Spring

  • 其他语言

  • 工具

  • 后端
  • Java
  • 并发
轩辕李
2021-12-14
目录

Java并发-JDK并发容器

并发编程中,会使用到容器类。JDK本身提供了一些常用且基础的容器类,很有必要了解一下。

# 旧时代的同步容器

在Java 1.5之前,现场安全的容器类比较有效,性能方面也差强人意,但我们还是要了解一下。

  • Vector。现场安全的ArrayList,所有方法都用synchronized修饰,达到线程安全的目的
  • HashTable。现场安全的HashMap,所有方法都用synchronized修饰,达到线程安全的目的
  • Collections.synchronizedXxx工厂方法。返回的容器类内部使用synchronized关键字实现线程安全

# 新时代的并发容器

Java 1.5之后,利用CAS指令(乐观锁)提供了更高效的并发容器。

  • ConcurrentLinkedQueue。高并发环境下性能最好的队列
  • CopyOnWriteArrayList。只在写时加锁的ArrayList,采用写时复制的思想,读性能大幅提升
  • BlockingQueue。一个阻塞式的数据共享通道,参考:阻塞队列BlockingQueue。他有三个主要实现:
    • ArrayBlockingQueue。数组支持的有界队列
    • LinkedBlockingQueue。链表支持的可选有界队列
    • LinkedBlockingDeque。链表支持的双向可选有界队列
  • ConcurrentMap。线程安全的map,主要实现有:
    • ConcurrentHashMap。高并发哈希表
    • ConcurrentSkipListMap。跳表,类似LinkedHashMap,提供有序的遍历。类似于平衡树,特点是插入和删除只需要对局部数据进行操作即可。平衡树的话需要全局锁,而跳表只需要部分锁。

具体的实现细节就不展开了,这里提一下并发容器中的一些思想。

  • ConcurrentHashMap。利用了分而治之的思想,使用到了分离锁。也就是把集合分为多个段,多每个段加锁,这样大大提高了性能
  • CopyOnWriteArrayList。采用了写时复制的思想,也就是修改他的时候会发布一个新的容器,而读到时候不加锁。在迭代频率远高于容器修改时,性能大大增强

# 分布式集合

分布式环境下要使用集合,可以考虑Redisson (opens new window)。
我在Java集合文章中有所介绍,请移步查看。

# 总结

工欲善其事,必先利其器。新时代的Java并发容器能较好且安全的解决多线程并发问题,需要好好的掌握他!

祝你变得更强!

编辑 (opens new window)
上次更新: 2023/06/14
Java并发-无锁策略CAS与atomic包
Java并发-异步调用结果之Future和CompletableFuture

← Java并发-无锁策略CAS与atomic包 Java并发-异步调用结果之Future和CompletableFuture→

最近更新
01
Spring Boot版本新特性
09-15
02
Spring框架版本新特性
09-01
03
Spring Boot开发初体验
08-15
更多文章>
Theme by Vdoing | Copyright © 2018-2025 京ICP备2021021832号-2 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式