/**
   * Creates a new instance.
   *
   * @param timer the {@link Timer} that is used to trigger the scheduled event. The recommended
   *     {@link Timer} implementation is {@link HashedWheelTimer}.
   * @param timeout read timeout
   * @param unit the {@link TimeUnit} of {@code timeout}
   */
  public ReadTimeoutHandler(Timer timer, long timeout, TimeUnit unit) {
    if (timer == null) {
      throw new NullPointerException("timer");
    }
    if (unit == null) {
      throw new NullPointerException("unit");
    }

    this.timer = timer;
    if (timeout <= 0) {
      timeoutMillis = 0;
    } else {
      timeoutMillis = Math.max(unit.toMillis(timeout), 1);
    }
  }
 NioDatagramWorker nextWorker() {
   return workers[Math.abs(workerIndex.getAndIncrement() % workers.length)];
 }