Class NioSelectorPool


  • public class NioSelectorPool
    extends java.lang.Object
    Thread safe non blocking selector pool
    • Constructor Summary

      Constructors 
      Constructor Description
      NioSelectorPool()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()  
      java.nio.channels.Selector get()  
      int getMaxSelectors()  
      int getMaxSpareSelectors()  
      java.util.concurrent.ConcurrentLinkedQueue<java.nio.channels.Selector> getSelectors()  
      protected java.nio.channels.Selector getSharedSelector()  
      long getSharedSelectorTimeout()  
      java.util.concurrent.atomic.AtomicInteger getSpare()  
      boolean isEnabled()  
      void open()  
      void put​(java.nio.channels.Selector s)  
      int read​(java.nio.ByteBuffer buf, NioChannel socket, java.nio.channels.Selector selector, long readTimeout)
      Performs a blocking read using the bytebuffer for data to be read and a selector to block.
      int read​(java.nio.ByteBuffer buf, NioChannel socket, java.nio.channels.Selector selector, long readTimeout, boolean block)
      Performs a read using the bytebuffer for data to be read and a selector to register for events should you have the block=true.
      void setEnabled​(boolean enabled)  
      void setMaxSelectors​(int maxSelectors)  
      void setMaxSpareSelectors​(int maxSpareSelectors)  
      void setSharedSelectorTimeout​(long sharedSelectorTimeout)  
      int write​(java.nio.ByteBuffer buf, NioChannel socket, java.nio.channels.Selector selector, long writeTimeout, boolean block)
      Performs a write using the bytebuffer for data to be written and a selector to block (if blocking is requested).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • SHARED

        protected static final boolean SHARED
      • SHARED_SELECTOR

        protected volatile java.nio.channels.Selector SHARED_SELECTOR
      • maxSelectors

        protected int maxSelectors
      • sharedSelectorTimeout

        protected long sharedSelectorTimeout
      • maxSpareSelectors

        protected int maxSpareSelectors
      • enabled

        protected boolean enabled
      • active

        protected java.util.concurrent.atomic.AtomicInteger active
      • spare

        protected java.util.concurrent.atomic.AtomicInteger spare
      • selectors

        protected java.util.concurrent.ConcurrentLinkedQueue<java.nio.channels.Selector> selectors
    • Constructor Detail

      • NioSelectorPool

        public NioSelectorPool()
    • Method Detail

      • getSharedSelector

        protected java.nio.channels.Selector getSharedSelector()
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • get

        public java.nio.channels.Selector get()
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • put

        public void put​(java.nio.channels.Selector s)
                 throws java.io.IOException
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • open

        public void open()
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        public int write​(java.nio.ByteBuffer buf,
                         NioChannel socket,
                         java.nio.channels.Selector selector,
                         long writeTimeout,
                         boolean block)
                  throws java.io.IOException
        Performs a write using the bytebuffer for data to be written and a selector to block (if blocking is requested). If the selector parameter is null, and blocking is requested then it will perform a busy write that could take up a lot of CPU cycles.
        Parameters:
        buf - The buffer containing the data, we will write as long as (buf.hasRemaining()==true)
        socket - The socket to write data to
        selector - The selector to use for blocking, if null then a busy write will be initiated
        writeTimeout - The timeout for this write operation in milliseconds, -1 means no timeout
        block - true to perform a blocking write otherwise a non-blocking write will be performed
        Returns:
        int - returns the number of bytes written
        Throws:
        java.io.EOFException - if write returns -1
        java.net.SocketTimeoutException - if the write times out
        java.io.IOException - if an IO Exception occurs in the underlying socket logic
      • read

        public int read​(java.nio.ByteBuffer buf,
                        NioChannel socket,
                        java.nio.channels.Selector selector,
                        long readTimeout)
                 throws java.io.IOException
        Performs a blocking read using the bytebuffer for data to be read and a selector to block. If the selector parameter is null, then it will perform a busy read that could take up a lot of CPU cycles.
        Parameters:
        buf - ByteBuffer - the buffer containing the data, we will read as until we have read at least one byte or we timed out
        socket - SocketChannel - the socket to write data to
        selector - Selector - the selector to use for blocking, if null then a busy read will be initiated
        readTimeout - long - the timeout for this read operation in milliseconds, -1 means no timeout
        Returns:
        int - returns the number of bytes read
        Throws:
        java.io.EOFException - if read returns -1
        java.net.SocketTimeoutException - if the read times out
        java.io.IOException - if an IO Exception occurs in the underlying socket logic
      • read

        public int read​(java.nio.ByteBuffer buf,
                        NioChannel socket,
                        java.nio.channels.Selector selector,
                        long readTimeout,
                        boolean block)
                 throws java.io.IOException
        Performs a read using the bytebuffer for data to be read and a selector to register for events should you have the block=true. If the selector parameter is null, then it will perform a busy read that could take up a lot of CPU cycles.
        Parameters:
        buf - ByteBuffer - the buffer containing the data, we will read as until we have read at least one byte or we timed out
        socket - SocketChannel - the socket to write data to
        selector - Selector - the selector to use for blocking, if null then a busy read will be initiated
        readTimeout - long - the timeout for this read operation in milliseconds, -1 means no timeout
        block - - true if you want to block until data becomes available or timeout time has been reached
        Returns:
        int - returns the number of bytes read
        Throws:
        java.io.EOFException - if read returns -1
        java.net.SocketTimeoutException - if the read times out
        java.io.IOException - if an IO Exception occurs in the underlying socket logic
      • setMaxSelectors

        public void setMaxSelectors​(int maxSelectors)
      • setMaxSpareSelectors

        public void setMaxSpareSelectors​(int maxSpareSelectors)
      • setEnabled

        public void setEnabled​(boolean enabled)
      • setSharedSelectorTimeout

        public void setSharedSelectorTimeout​(long sharedSelectorTimeout)
      • getMaxSelectors

        public int getMaxSelectors()
      • getMaxSpareSelectors

        public int getMaxSpareSelectors()
      • isEnabled

        public boolean isEnabled()
      • getSharedSelectorTimeout

        public long getSharedSelectorTimeout()
      • getSelectors

        public java.util.concurrent.ConcurrentLinkedQueue<java.nio.channels.Selector> getSelectors()
      • getSpare

        public java.util.concurrent.atomic.AtomicInteger getSpare()