循环获取线程数组中的线程

210 阅读1分钟
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)];
       }