private final AtomicInteger idx = new AtomicInteger();
public EventExecutor newChooser(EventExecutor[] executors) {
if (isPowerOfTwo(executors.length)) {
return getPowerOfTwoEventExecutor(executors);
} else {
return getGenericEventExecutor(executors);
}
}
private static boolean isPowerOfTwo(int val) {
return (val & -val) == val;
}
public EventExecutor getPowerOfTwoEventExecutor(EventExecutor[] executors) {
return executors[idx.getAndIncrement() & executors.length - 1];
}
public EventExecutor getGenericEventExecutor(EventExecutor[] executors) {
return executors[Math.abs(idx.getAndIncrement() % executors.length)];
}