1.要解决的问题
多个生产者、多个消费者线程在内存中完成合作
2.应用场景
- 需要用到并发内存消息队列的场景,如撮合交易
3.需要的基础知识
- CAS(CompareAndSwap)
- 位运算
4.解决思路
- 用数组不用链表,更快
- 保证生产、消费的持续,需是循环队列
- 不用Syncronized、不用显示锁,更快
- 使用AtomicReferenceArray中的CAS API,保证线程安全且更快
- 数组长度设置为2^n,位运算计算下标,更快
5.关键源码
- 数据成员
private AtomicReferenceArray<T> circleAtomicArray;
//最大2^32-1
static final int MAXIMUM_CAPACITY = 1 << 30;
T EMPTY=null;
//队头元素下标
private volatile AtomicInteger head=new AtomicInteger(0);
//队尾元素的下一个位置
private volatile AtomicInteger tail=new AtomicInteger(0);
private int size=32;
- isEmpty方法
public boolean isEmpty()