并发队列与 ABA 问题
在并发系统中,队列是一种非常重要的数据结构,它可以用于实现生产者 - 消费者模型,以及保证操作的公平性。本文将详细介绍并发队列的相关概念和实现,包括有界部分队列、无界总队列和无界无锁队列。
1. 池的概念
在并发系统中,池是一类广泛使用的对象。它类似于集合类,但有两个主要区别:一是池不一定提供 contains() 方法来测试成员资格;二是池允许同一元素多次出现。池有 get() 和 set() 方法,以下是池的接口定义:
public interface Pool<T> {
void set(T item);
T get();
}
池有多种类型:
- 有界和无界 :有界池只能容纳有限数量的元素,这个限制称为容量;无界池则可以容纳任意数量的元素。有界池有助于生产者和消费者线程的松散同步,避免生产者领先消费者太多,且实现可能更简单;无界池适用于不需要对生产者领先消费者的程度设置固定限制的场景。
- 方法类型 :
- 总方法 :调用时不等待特定条件变为真。例如,从空池移除元素的 get() 调用会立即返回失败代码或抛出异常;向满的有界池添加元素的 set() 调用也会立即返回失败代码或异常。当生产者或消费者线程有更重要的事情要做时,总接口很有用。
超级会员免费看
订阅专栏 解锁全文
45

被折叠的 条评论
为什么被折叠?



