1. 一般轮询算法
服务器类
Java代码
package com.sosop.roundRobin;
public class Server {
private String ip;
private int weight;
public Server(String ip) {
super();
this.ip = ip;
}
public Server(String ip, int weight) {
this.ip = ip;
this.weight = weight;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String toString() {
return "Server [ip=" + ip + ", weight=" + weight + "]";
}
}
实现与测试
Java代码
package com.sosop.roundRobin;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class NormalRoundRobin {
private List servers;
private int currentIndex;
private int totalServer;
public NormalRoundRobin() {
servers = new ArrayList<>();
servers.add(new Server("192.168.1.2"));
servers.add(new Server("192.168.1.3"));
servers.add(new Server("192.168.1.4"));
servers.add(new Server("192.168.1.5"));
servers.add(new Server("192.168.1.6"));
servers.add(new Server("192.168.1.7"));
servers.add(new Server("192.168.1.8"));
totalServer = servers.size();
currentIndex = totalServer - 1;
}
// 轮询
public Server round() {
currentIndex = (currentIndex + 1) % totalServer;
return servers.get(currentIndex);
}
public static void main(String[] args) {
final NormalRoundRobin r = new NormalRoundRobin();
// 不带并发的轮询
for (int i = 0; i
System.out.println(r.round());
}
System.out.println();
System.out.println("==========================");
System.out.println();
final CyclicBarrier b = new CyclicBarrier(14);
// 带并发的轮询
for (int i = 0; i
new Thread(new Runnable() {
public void run() {
try {
b.await();
System.out.println(Thread.currentThread().getName() + " " + r.round());
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}, "thread" + i).start();
}
}
}
结