ConcurrentLinkedQueue是Queue的一个安全实现.Queue中元素按FIFO原则进行排序.采用
CAS操作,来保证元素的一致性。
CAS操作
CAS是单词compare and set的缩写,意思是指在set之前先比较该值有没有变化,只有在没变的情况下才对其赋值。
package com.pst.demo; import java.util.concurrent.ConcurrentLinkedQueue; public class DataContainer { private boolean ending = false; private int currCount = 0; private int _queueCapacity; private ConcurrentLinkedQueue<Object> _queue = new ConcurrentLinkedQueue<Object>(); public DataContainer() { this(20);//默认大小 } public DataContainer(int queueCapacity) { this._queueCapacity = queueCapacity; } public synchronized void insertData(Object data) throws InterruptedException{ while (currCount > _queueCapacity) { wait(); } currCount++; _queue.add(data); notifyAll(); } public synchronized Object getData() throws InterruptedException{ while (currCount <= 0) { if(!ending){ wait(); }else{ break; } } currCount--; Object results = _queue.poll(); notifyAll(); if (results == null || results instanceof Integer) { this.ending = true; } return results; } }