java.util.concurrent包下的常用类

1. ConcorrenctHashMap

  • HashMap的线程安全版本
  • 底层实现
    • JDK1.7及之前:数组+链表(segment+HashEntry+链表)
    • JDK1.8开始:数组+链表+红黑树(node+链表+红黑树)
    • segment数目初始化之后不可变,默认16
    • node节点数目初始化之后可变,相比于segment粒度更小
  • 线程安全的实现方式
    • JDK1.7及之前:对segment(分段)进行上锁
    • JDK1.8开始:对node节点进行上锁
  • 链表和红黑树的转化规则
    • 当前node节点的链表数目大于等于8,并且总结点大于等于64,由链表转为红黑树
    • 当前node节点的红黑树节点数目小于等于6,由红黑树转为链表
    • 这两个值不一样是为了避免频繁转化,造成性能消耗

2. CopyOnWriteArrayList

  • 作用于读写场景,读多写少
  • 与ReentrantReadWriteLock类似,不同的是ReentrantReadWriteLock有读锁,而CopyOnWriteArrayList没有读锁
  • 在有读线程的时候仍然可以进行写,通过写时复制实现,在写的时候复制出一个副本进行写,最后进行合并

3. ReentrantLock

  • 可重入锁
  • 继承Lock接口
  • 内部核心类为sync类,这个类下面又有fairSync和noFairSync类
  • sync类继承AQS抽象类,所以ReentrantLock中的锁的实现还是通过AQS实现的
  • 与synchronized相比,多了一些功能,如Condition,可以控制某些对象的加锁解锁,而不是像synchronized一样只能全部加锁解锁

4. ReentrantReadWriteLock

  • 适合读多写少的场景
  • 读读不冲突,读写冲突,写写冲突

5. CountDownLatch

  • 当满足所有条件后主线程才继续往下执行
  • 只能使用一次

6. CyclicBarrier

  • 可重用
  • 不会阻塞主线程,主线程会继续执行

7. Semaphore

  • 用于标识多个相同资源的分配情况

8. BlockingQueue

  • ArrayBlockIngQueue
    • 有界
    • 数组
  • LinkedBlockingQueue
    • 可选有界(默认Integer.MAX_VALUE)
    • 链表
  • PriorityBlockingQueue
    • 无界
    • 优先级排序
  • SynchronousQueue
    • 同步队列
    • 不存储元素
    • 通常用于线程之间的直接数据传递
  • DelayQueue
    • 用于定时任务的执行
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让我再学一分钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值