【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)

小结

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

猜你喜欢

转载自blog.csdn.net/Francis123580/article/details/80638539