AIO
AsynchronousSeverSocketChannel 异步accept
AsyncchronousSocketChannel 异步read、write、connect
CompletionHandler<Void, ? super A>:异步Socket通道进行异步accept、connect、read和write时,IO操作完成通过CompletionHandler类进行处理。
NIO2.0引入了异步通道,异步文件通道和异步套接字通道。
java.util.concurrent.Future表示异步操作read、write等的返回值
服务器端在执行异步accept时传入一个异步套接字通道,和客户端进行数据传输
CompletionHandler接口的实现类作为操作完成的回调
以时间服务器为例【该例子就是一个短连接,即服务器收到客户端的请求,则响应一下时间,结束】:
1)主线程main运行,在一个新线程中,即在AsyncTimeServerHandler implements Runnable类中的 doAccept函数中:
asynchronousServerSocketChannel.accept( this, new AcceptCompletionHandler() );
例如CompletionHandler<Integer, ByteBuffer>接口中含有 completed(integer result, ByteBuffer attachment)和failed(Throwable exc, ByteBuffer attachment)
2)如果监听端口成功,则异步ServerSocket通道继续监听,并且异步套接字通道进行异步read,即从客户端接收数据,从异步套接字result传入的数据就是客户端的数据。当接收完成,执行ReadCompletionHandler的completed方法。ReadCompletionHandler将传输客户端数据的异步SocketChannel对象注入。
3)接收成功后,检测接收到的数据如果符合要求,则会将当前时间写入到上面注入的异步SocketChannel对象。
【总结:异步操作从形式上来看,就是参数中多了一个操作完成后需要执行的一个回调对象CompletionHandler,在该对象中编写异步读、写等完成后的逻辑。并且异步操作返回Future<>类型,future.get()应该是如果此时需要返回的数据,如果还没有完成,就会阻塞等一会儿。】