【Java】多线程 并发容器 & 原子操作类

并发容器

ConcurrentHashMap
  1. HashMap线程不安全,可能导致程序死循环;
  2. HashTable效率低下,使用synchronized保证线程安全;
  3. ConcurrentHashMap采用锁分段技术,有效提升并发访问率;
ConcurrentLinkedQueue
  1. 基于链接节点的无界线程安全队列;
  2. 采用先进先出的规则对节点进行排序;
  3. 添加的元素会添加到队列的尾部;
  4. 获取的元素会返回队列头部的元素;
BlockingQueue

阻塞队列支持:

  • 阻塞插入:队列满时,队列阻塞插入元素的线程,直到队列不满;
  • 阻塞移除:队列为空时,获取元素的线程会等待,知道队列为非空;

阻塞队列类型:

  1. ArrayBlockingQueue:数组有界 阻塞队列
  2. LinkedBlockingQueue:链表有界 阻塞队列
  3. PriorityBlokingQueue:支持优先级排序无界 阻塞队列
  4. DelayQueue:使用优先级排序无界 阻塞队列(延时获取)
  5. SynchronousQueue:不存储元素 阻塞队列(传球手)
  6. LinkedTransferQueue:链表无界 阻塞队列(生产传递消费)
  7. LinkedBlockingDeque:链表双向 阻塞队列(可用于Fork/Join框架)

 

原子操作类

类型内容
基本类型AtomicBoolean / AtomicInteger / AtomicLong
数组AtomicIntegerArray / AtomicLongArray / AtomicReferenceArray
引用类型AtomicReference / AtomicReferenceFieldUpdater / AtomicMarkableReference
字段类AtomicIntegerFieldUpdate / AtomicLongFieldUpdate / AtomicStampedReference

基本类型 方法

  • int addAndGet(int delta)
  • boolean compareAndSet(int expect, int update)
  • int getAndIncreament()
  • void lazySet(int newValue)
  • int getAndSet(int newValue)

数组 方法

  • int addAndGet(int i, int delta)
  • boolean compareAndSet(int i, int expect, int update)

 

小结

并发容器提供了性能高效、线程安全地存储元素的方式;
原子操作类提供了用法简单、性能高效、线程安全地更新变量的方式;
总之,他们都是在多线程的基础上为我们提供了很好的工具

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值