您的位置:首页 > 产品设计 > UI/UE

使用BlockingQueue创建生产者消费者模式

2015-12-28 17:39 507 查看
使用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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: