今天在公司因为业务需求用到java.util.concurrent并发包下的集合。自己做了一个简单的包装,造了一个简单的轮子。支持多线程安全的有界队列。涉及volatile,AtmicInteger等应用。定义队列满时候的丢弃策略。
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
/**
* ConcurrentBoundedQueue
*/
public class ConcurrentBoundedQueue<T> {
private volatile int capacity;
private AtomicInteger discardItemCount = new AtomicInteger();
private DiscardPolicy discardPolicy;
private ConcurrentLinkedQueue<T> internalQueue;
/// <summary>
/// ConcurrentBoundedQueue构造函数
/// </summary>
/// <param name="capacity">队列容量</param>
/// <param name="discardPolicy">丢弃策略</param>
public ConcurrentBoundedQueue(int capacity, DiscardPolicy discardPolicy)
{
//容量必须为正整数
if (capacity <= 0) capacity = 1;
this.capacity = capacity;
discardI