DefaultEventExecutorChooserFactory

构造函数

public static final DefaultEventExecutorChooserFactory INSTANCE = new DefaultEventExecutorChooserFactory();

    private DefaultEventExecutorChooserFactory() { }

newChooser

策略模式

public EventExecutorChooser newChooser(EventExecutor[] executors) {
        if (isPowerOfTwo(executors.length)) {
            return new PowerOfTwoEventExecutorChooser(executors);
        } else {
            return new GenericEventExecutorChooser(executors);
        }
    }

isPowerOfTwo

/**  1 2 4 8 16 ....... */
    private static boolean isPowerOfTwo(int val) {
        return (val & -val) == val;
    }

PowerOfTwoEventExecutorChooser

性能比GenericEventExecutorChooser好

private static final class PowerOfTwoEventExecutorChooser implements EventExecutorChooser {
        private final AtomicInteger idx = new AtomicInteger();
        private final EventExecutor[] executors;

        PowerOfTwoEventExecutorChooser(EventExecutor[] executors) {
            this.executors = executors;
        }

        @Override
        public EventExecutor next() {// -的 优先级高于& (executors.length - 1 后每位都是1)
            return executors[idx.getAndIncrement() & executors.length - 1]; // 通过位操作实现  1-1=0     10(二进制)-1=1     100(二进制)-1=11   1000(二进制)-1=111
        }
    }

GenericEventExecutorChooser

private static final class GenericEventExecutorChooser implements EventExecutorChooser {
        private final AtomicInteger idx = new AtomicInteger();
        private final EventExecutor[] executors;

        GenericEventExecutorChooser(EventExecutor[] executors) {
            this.executors = executors;
        }
        @Override
        public EventExecutor next() {
            return executors[Math.abs(idx.getAndIncrement() % executors.length)];  // 通过取余实现
        }
    }