无锁并发环形队列(Java版)

环形队列是顺序队列的一种。普通的顺序队列,当队列不满且tail指针移动到数组的最后位置时,就需要将数组中的元素整体向前搬移,而环形队列却不用。这就提高了入队的效率。

无锁并发主要基于CAS原理,在java中Unsafe类中提供了底层的CAS操作。但是我们可以不直接操作Unsafe类,JDK提供了一系列的Atomic类来满足一般的无锁需求。

import java.util.concurrent.atomic.AtomicInteger;

public class ConcurrentLoopQueue {
    private int capacity;
    private AtomicInteger head;
    private AtomicInteger tail;
    private volatile Integer[] array;


    public ConcurrentLoopQueue(int capacity) {
        this.capacity = capacity;
        array = new Integer[capacity];
        head = new AtomicInteger(0);
        tail = new AtomicInteger(0);
    }


    public boolean enqueue(Integer ele){
        boolean flag = true;
        int preTail = 0;
        int nextTail = 0;
        while(flag){
            preTail = tail.get();
            if((preTail + 1) % capacity == head.get()){ //队列已满
                return false;
            }

你可能感兴趣的:(数据结构和算法,队列,java,多线程)