使用BlockingQueue创建生产者消费者模式
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.stereotype.Component;
import cn.data.entity.DataDO;
/**
* 生产者消费者操作队列类 FIFO
* @author zhengyong
*/
@Component
public class DataBlockingQueue {
// 最大队列数
public static final Integer MAX_QUEUE_COUNT = 10000 * 50;
// 声明队列
private BlockingQueue<DataDO> queue = new LinkedBlockingQueue<DataDO>(MAX_QUEUE_COUNT);
// 统计已经消费数据数目
private AtomicInteger takeCount = new AtomicInteger(0);
// 统计发送失败数据数目
private AtomicInteger faildCount = new AtomicInteger(0);
/**
* 添加数据进队列
* @param blackListDO
* @throws InterruptedException
*/
public void putQueue(DataDO blackListDO) throws InterruptedException{
queue.put(blackListDO);
}
/**
* 消费队列数据
* @return
* @throws InterruptedException
*/
public DataDO takeQueue() throws InterruptedException{
DataDO blackListDO = queue.take();
this.takeCount.incrementAndGet();
return blackListDO;
}
/**
* 获取队列
* @return
*/
public BlockingQueue<DataDO> getQueue(){
return queue;
}
/**
* 获取已经取出队列的记录数
* @return
*/
public Integer getTakeCount(){
return takeCount.intValue();
}
/**
* 消费失败数增加1
* @return
*/
public void incrementFaildCount(){
this.faildCount.incrementAndGet();
}
/**
* 获取失败数
* @return
*/
public Integer getFaildCount(){
return faildCount.intValue();
}
}