以前兩篇相關博文: 權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現 http://www.cnblogs.com/huligong1234/p/3819979.html 權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現2 http://www.cnblogs.com/huligong1234/p/3862665.html
以前兩篇講到的方案都稍複雜些,在實際項目中,對權重輪詢精確要求不高的狀況下,還能夠有更簡便的方式,就是利用Java自帶的Random來實現。
(固然也能夠利用Collections.shuffle()來達到目的)
示例代碼以下:html
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Random; /** * 權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現 * @author huligong * */ public class WeightedRoundRobinScheduling { public static void main(String[] args) { Map<String,Integer> serverWeight = new HashMap<String,Integer>(); serverWeight.put("192.168.1.100", 6);//ip,權重 serverWeight.put("192.168.1.101", 3); serverWeight.put("192.168.1.102", 2); serverWeight.put("192.168.1.104", 1); String ip = getServer(serverWeight); } public static String getServer(Map<String,Integer> serverWeight){ Random random = new Random(); ArrayList<String> serverList = new ArrayList<String>(); for(Map.Entry<String, Integer> m : serverWeight.entrySet()){ for(int i=0,len=m.getValue();i<len;i++){ serverList.add(m.getKey()); } } String[] servers = serverList.toArray(new String[serverList.size()]); int weight_idx = random.nextInt(servers.length); String ip = servers[weight_idx]; return ip; } }