首页 > 其他 > 详细

根据商品id,把它路由到对应的内存队列中

时间:2020-11-13 16:27:14      阅读:43      评论:0      收藏:0      [点我收藏+]

// 获取路由到的内存队列

private ArrayBlockingQueue getRoutingQueue(Integer productId) {

RequestQueue requestQueue = RequestQueue.getInstance();
//获取productId的hash值
String key = String.valueOf(productId);
int h;
int hash = (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
//对hash值取模,将hash值路由到指定的内存队列中 
int index = (requestQueue.queueSize() - 1) & hash;
	
return requestQueue.getQueue(index);

}

// 请求内存队列

public class RequestQueue {

//内存队列
private List<ArrayBlockingQueue<Request>> queues = new ArrayList<ArrayBlockingQueue<Request>>();
//标识位map
private Map<Integer,Boolean> flagMap = new ConcurrentHashMap<Integer, Boolean>();

private static class Singleton{
	private static RequestQueue instance;
	static {
		instance = new RequestQueue();
	}
	private static RequestQueue getInstance() {
		return instance;
	}
	
}
public static RequestQueue getInstance() {
	return Singleton.getInstance();
}
/**
 * 增加一个内存队列
 * @param queue
 */
public void addQueue(ArrayBlockingQueue<Request> queue) {
	this.queues.add(queue);
}
/**
 * 获取内存队列数量
 * @return
 */
public int queueSize() {
	return queues.size();
}
/**
 * 获取内存队列
 * @param index
 * @return
 */
public ArrayBlockingQueue<Request> getQueue(int index){
	return queues.get(index);
}

public Map<Integer,Boolean> getFlagMap(){
	return flagMap;
}

}

根据商品id,把它路由到对应的内存队列中

原文:https://www.cnblogs.com/xiaomage1001/p/13969442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!