package com.panda.core.db.asyncdb; import com.panda.core.db.model.IEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; /** * 需要异步存储的数据队列 * Created by Lovell on 16/6/20. */ public class DBQueue { private static Logger logger = LoggerFactory.getLogger(DBQueue.class); private BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>(); private Map<String, Serializable> entities = new ConcurrentHashMap<String, Serializable>(); /** * 添加到存储队列中 */ public void add(IEntity entity) { String key = entity.getClass().getSimpleName() + "#" + entity.getId(); if (blockingQueue.contains(key)) { try { blockingQueue.offer(key, 1, TimeUnit.SECONDS); }catch (InterruptedException e) { e.printStackTrace(); logger.error("db queue is full error..."); } } entities.put(key, entity); } /** * 从存储的队列中移除 */ public IEntity pop() { String id = blockingQueue.poll(); return (IEntity) entities.remove(id); } /** * 队列的大小 */ public int size() { return blockingQueue.size(); } }
Java 异步存储数据队列
最新推荐文章于 2024-05-29 13:27:48 发布