如netty源码:
public final class DefaultEventExecutorChooserFactory implements EventExecutorChooserFactory {
...........................................
private static final class GenericEventExecutorChooser implements EventExecutorChooser {
// Use a 'long' counter to avoid non-round-robin behaviour at the 32-bit overflow boundary.
// The 64-bit long solves this by placing the overflow so far into the future, that no system
// will encounter this in practice.
private final AtomicLong idx = new AtomicLong();
private final EventExecutor[] executors;
GenericEventExecutorChooser(EventExecutor[] executors) {
this.executors = executors;
}
@Override
public EventExecutor next() {
return executors[(int) Math.abs(idx.getAndIncrement() % executors.length)];
}
}
}
自定义实现:
import java.util.concurrent.atomic.AtomicLong;
public class Lunxunsf {
public static void main(String[] args) throws InterruptedException {
String[] a = {"a","b","c"};
Lunxun lunxun = new Lunxun(a);
for(;;){
Thread.sleep(1000);
System.out.print(lunxun.next());
}
}
}
class Lunxun{
Lunxun(String[] stra){
this.stra = stra;
}
private final AtomicLong idx = new AtomicLong();
private String[] stra;
public String next() {
return stra[(int) Math.abs(idx.getAndIncrement() % stra.length)];
}
}