// 获取路由到的内存队列
private ArrayBlockingQueue
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;
}
}
原文:https://www.cnblogs.com/xiaomage1001/p/13969442.html