Class NioDatagramChannelFactory

  • All Implemented Interfaces:
    ChannelFactory, DatagramChannelFactory, ExternalResourceReleasable

    public class NioDatagramChannelFactory
    extends java.lang.Object
    implements DatagramChannelFactory
    A DatagramChannelFactory that creates a NIO-based connectionless DatagramChannel. It utilizes the non-blocking I/O mode which was introduced with NIO to serve many number of concurrent connections efficiently.

    How threads work

    There is only one thread type in a NioDatagramChannelFactory; worker threads.

    Worker threads

    One NioDatagramChannelFactory can have one or more worker threads. A worker thread performs non-blocking read and write for one or more DatagramChannels in a non-blocking mode.

    Life cycle of threads and graceful shutdown

    All worker threads are acquired from the Executor which was specified when a NioDatagramChannelFactory was created. Therefore, you should make sure the specified Executor is able to lend the sufficient number of threads. It is the best bet to specify a cached thread pool.

    All worker threads are acquired lazily, and then released when there's nothing left to process. All the related resources such as Selector are also released when the worker threads are released. Therefore, to shut down a service gracefully, you should do the following:

    1. close all channels created by the factory usually using ChannelGroup.close(), and
    2. call releaseExternalResources().
    Please make sure not to shut down the executor until all channels are closed. Otherwise, you will end up with a RejectedExecutionException and the related resources might not be released properly.

    Limitation

    Multicast is not supported. Please use OioDatagramChannelFactory instead.