src/java.base/share/classes/java/nio/channels/Selector.java

Print this page

        

@@ -27,11 +27,11 @@
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.nio.channels.spi.SelectorProvider;
 import java.util.Set;
-
+import java.util.function.Consumer;
 
 /**
  * A multiplexor of {@link SelectableChannel} objects.
  *
  * <p> A selector may be created by invoking the {@link #open open} method of

@@ -295,10 +295,44 @@
      *          If this selector is closed
      */
     public abstract int selectNow() throws IOException;
 
     /**
+     * Selects keys whose corresponding channels are ready for I/O
+     * operations and passes them to the provided consumer.
+     *
+     * <p> This method performs a non-blocking <a href="#selop">selection
+     * operation</a>.  If no channels have become selectable since the previous
+     * selection operation then this method immediately returns zero.
+     *
+     * <p>The difference between this method and {@link #selectNow()} is that
+     * this method immediately passes the {@link java.nio.channels.SelectionKey} objects
+     * to its handler, rather than updating the key set.</p>
+     *
+     * <p> Invoking this method clears the effect of any previous invocations
+     * of the {@link #wakeup wakeup} method.  </p>
+     *
+     * @return  The number of keys, possibly zero, whose ready-operation sets
+     *          were updated by the selection operation
+     *
+     * @param   handler A handler function which is invoked with new SelectionKey
+     *                  objects When an selection operation occurs. It is called
+     *                  the same number of times as the return value.
+     *
+     * @throws  java.lang.NullPointerException
+     *          if the handler is null.
+     *
+     * @throws  IOException
+     *          If an I/O error occurs
+     *
+     * @throws  ClosedSelectorException
+     *          If this selector is closed
+     */
+    public abstract int selectNow(Consumer<SelectionKey> handler)
+        throws IOException;
+
+    /**
      * Selects a set of keys whose corresponding channels are ready for I/O
      * operations.
      *
      * <p> This method performs a blocking <a href="#selop">selection
      * operation</a>.  It returns only after at least one channel is selected,

@@ -328,10 +362,51 @@
      */
     public abstract int select(long timeout)
         throws IOException;
 
     /**
+     * Selects keys whose corresponding channels are ready for I/O
+     * operations and passes them to the provided consumer.
+     *
+     * <p> This method performs a blocking <a href="#selop">selection
+     * operation</a>.  It returns only after at least one channel is selected,
+     * this selector's {@link #wakeup wakeup} method is invoked, the current
+     * thread is interrupted, or the given timeout period expires, whichever
+     * comes first.
+     *
+     * <p>The difference between this method and {@link #select(long)} is that
+     * this method immediately passes the {@link java.nio.channels.SelectionKey} objects
+     * to its handler, rather than updating the key set.</p>
+     *
+     * <p> This method does not offer real-time guarantees: It schedules the
+     * timeout as if by invoking the {@link Object#wait(long)} method. </p>
+     *
+     * @param   handler A handler function which is invoked with new SelectionKey
+     *                  objects When an selection operation occurs. It is called
+     *                  the same number of times as the return value.
+     *
+     * @param  timeout  If positive, block for up to <tt>timeout</tt>
+     *                  milliseconds, more or less, while waiting for a
+     *                  channel to become ready; if zero, block indefinitely;
+     *                  must not be negative
+     *
+     * @return  The number of keys, possibly zero,
+     *          whose ready-operation sets were updated
+     *
+     * @throws  IOException
+     *          If an I/O error occurs
+     *
+     * @throws  ClosedSelectorException
+     *          If this selector is closed
+     *
+     * @throws  IllegalArgumentException
+     *          If the value of the timeout argument is negative
+     */
+    public abstract int select(Consumer<SelectionKey> handler, long timeout)
+        throws IOException;
+
+    /**
      * Selects a set of keys whose corresponding channels are ready for I/O
      * operations.
      *
      * <p> This method performs a blocking <a href="#selop">selection
      * operation</a>.  It returns only after at least one channel is selected,