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;
}
}