并发容器
ConcurrentHashMap
- HashMap线程不安全,可能导致程序死循环;
- HashTable效率低下,使用synchronized保证线程安全;
- ConcurrentHashMap采用锁分段技术,有效提升并发访问率;
ConcurrentLinkedQueue
- 基于链接节点的无界线程安全队列;
- 采用先进先出的规则对节点进行排序;
- 添加的元素会添加到队列的尾部;
- 获取的元素会返回队列头部的元素;
BlockingQueue
阻塞队列支持:
- 阻塞插入:队列满时,队列阻塞插入元素的线程,直到队列不满;
- 阻塞移除:队列为空时,获取元素的线程会等待,知道队列为非空;
阻塞队列类型:
- ArrayBlockingQueue:数组有界 阻塞队列
- LinkedBlockingQueue:链表有界 阻塞队列
- PriorityBlokingQueue:支持优先级排序无界 阻塞队列
- DelayQueue:使用优先级排序无界 阻塞队列(延时获取)
- SynchronousQueue:不存储元素 阻塞队列(传球手)
- LinkedTransferQueue:链表无界 阻塞队列(生产传递消费)
- 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)
小结
并发容器提供了性能高效、线程安全地存储元素的方式;
原子操作类提供了用法简单、性能高效、线程安全地更新变量的方式;
总之,他们都是在多线程的基础上为我们提供了很好的工具