class AcceptCompletionHandler implements CompletionHandler<AsynchronousSocketChannel, Void> { private final AsynchronousServerSocketChannel serverSocketChannel; AcceptCompletionHandler(AsynchronousServerSocketChannel serverSocketChannel) { this.serverSocketChannel = serverSocketChannel; } @Override public void completed(AsynchronousSocketChannel socketChannel, Void attachment) { serverSocketChannel.accept(null, this); // non-blocking ByteBuffer buffer = ByteBuffer.allocate(1024); ReadCompletionHandler readCompletionHandler = new ReadCompletionHandler(socketChannel, buffer); socketChannel.read(buffer, null, readCompletionHandler); // non-blocking } @Override public void failed(Throwable t, Void attachment) { // exception handling } }