Concurrent包

Java的Concurrent包提供了高并发编程的基础组件,包括BlockingQueue、ConcurrentMap、ExecutorService、Lock和原子性操作。 BlockingQueue是线程安全的队列,如ArrayBlockingQueue、LinkedBlockingQueue和PriorityBlockingQueue等,它们在队列满或空时会阻塞线程。ConcurrentMap如ConcurrentHashMap支持并发映射和线程安全。ExecutorService是线程池的实现,Callable和ScheduledExecutorService提供定时执行功能。Lock接口及其实现如ReentrantLock提供了更细粒度的锁控制。此外,还包括CountDownLatch、CyclicBarrier、Exchanger和Semaphore等同步工具。
摘要由CSDN通过智能技术生成

概述

1.是JDK1.5提供的应对高并发的基础包

2.主要包含:BlockingQueue,ConcurrentMap,ExecutorService,Lock,原子性操作

BlockingQueue-阻塞式队列

本质是队列,满足队列的原则(先进先出FIFO)。

所有的阻塞式队列都是有界的-当队列定义好之后,大小就不可变。

阻塞:当队列已满的时候,再试图放入的线程会被阻塞。当队列为空的时候,再试图拿支的线程会被阻塞。

要求队列中的元素必须非空

方法 

  抛出异常 返回值 阻塞 定时阻塞
添加 add offer-true/false put offer
获取 remove poll-null take poll

 

 

 

 

ArrayBlockingQueue-阻塞式顺序队列

底层是基于数组进行存储

使用的时候需要指定容量,定义好后容量不可变

 

LinkedBlockingQueue-并发队列

底层是基于节点实现的

在使用的时候可以不指定容量。如果指定了容量,指定多大就是多大。如果不指定容量,默认容量是Integer.MAX_VALUE=>2的31次方-1.因为在实际生产环境中,一般不会向一个队列中添加21亿个值,所以一般会认为这个队列如果不指定容量就是无界的。

 

PriorityBlockingQueue-具有优先级的阻塞式队列

在使用的时候可以指定容量,也可以不指定。如果不指定容量,默认容量是11.(DEFAULT_INITIAL_CAPACITY = 11)

在拿取元素的时候,会对元素进行排序(自然排序-自然排序如果不指定一般是升序)。

要求元素所对应的类必须实现Comparable接口,重写compareTo方

如果使用迭代遍历的方式,则此时排序规则无效。

 

SynchronousQueue-同步队列

使用的时候不需要指定容量,默认容量为1

 

BlockingDeque-阻塞式双向队列

允许两端添加或者获取元素

继承了BlockingQueue

 

ConcurrentMap-并发映射

本质上是一个Map,存储的元素依然是键值对结构

保证映射的并发能力以及线程安全的能力。

 

ConcurrentHashMap-并发哈希映射

底层是数组+链表结构来存储数据。

默认初始容量是16,默认加载因子是0.75,扩容的时候,默认每次增加一倍。

采用了分段(分桶)锁机制。在后续版本中,ConcurrentHashMap为了提高效率,在分段锁的基础上,引入了读写锁机制。

a.读锁:允许多个线程读,不允许线程写。

b.写锁:只允许一个线程写。不允许线程读。

在JDK1.8中,引入了CAS(Compare And Swap-比较和交换)无锁算法。保证线程安全性。

CAS:我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少。(V:内存值,A:旧的预期值,B:新的预期值。CAS过程只要被打断,那么就会从头重新比较)。

从JDK1.8开始,如果一个桶中的元素个数超过了8个的时候,这个桶中的链表会扭转成一棵红黑树;如果不足8个,那么红黑树扭转回链表。

a.红黑树:红黑树本质上是一棵自平衡二叉查找树。

b.二叉查找树:左子树都小于根,右子

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值