docs: public void forEach(Consumer<SelKey> func, long timeout) throws IOException
      {
          fine("forEach("+timeout+")");
          lock.lock();
          try
          {
              ensureAllRunning();
              while (true)
              {
                  try
                  {
                      SelKey sk = queue.poll(timeout, TimeUnit.MILLISECONDS);
                      if (sk != null)
                      {
                          if (sk == WAKEUP_KEY)
                          {
                              fine("forEach() got wakeup()");
                              return;
                          }
                          func.accept(sk);
                          SelChannel channel = sk.channel();
                          Future<?> future = executor.submit(channel);
                          runMap.put(channel, future);
                      }
                      else
                      {
                          fine("forEach() got timeout");
                          return;
                      }
                  }
                  catch (InterruptedException ex)
                  {
                      fine("forEach() interrupted");
                      return;
                  }
              }
          }
          finally
          {
              lock.unlock();
          }
      }