/**
* 寻找空闲服务器
*
* @return
*/
public DcenterServer getFreeServer(Map<Long, DcenterServer> availableServer) {
// 降序
Comparator<Map.Entry<Long, DcenterServer>> valueComparator = new Comparator<Map.Entry<Long, DcenterServer>>() {
@Override
public int compare(Map.Entry<Long, DcenterServer> o1, Map.Entry<Long, DcenterServer> o2) {
Integer o1ServerNum = o1.getValue().getTaskNum() - o1.getValue().getCurrentNum();
Integer o2ServerNum = o2.getValue().getTaskNum() - o2.getValue().getCurrentNum();
return o2ServerNum - o1ServerNum;
// 如果想按照升序排列按照下面的写法
// return o1.getValue()-o2.getValue();
}
};
// map转换成list进行排序
List<Map.Entry<Long, DcenterServer>> list = new ArrayList<Map.Entry<Long, DcenterServer>>(
availableServer.entrySet());
// 排序
Collections.sort(list, valueComparator);
if (list.size() > 0) {
DcenterServer dcenterServer = list.get(0).getValue();
Integer idleServer = dcenterServer.getTaskNum() - dcenterServer.getCurrentNum();
if(idleServer <= 0) {
//最空闲服务器 都没有资源了 抛弃当前任务
return null;
}
//有空闲服务器
return dcenterServer;
}
return null;
}