Bob*_*r02 4 java asynchronous nio channels
Java NIO提供SocketChannel
并ServerSocketChannel
可以将其设置为非阻塞模式(异步)。大多数操作返回的值对应于成功或该操作尚未完成。是什么目的AynchronousSocketChannel
,并AsynchronousServerSocketChannel
随后,除了回调的功能?
当使用采用CompletionHandler的方法时,AynchronousSocketChannel和AsynchronousServerSocketChannel就派上用场了。
例如,服务器中的代码可能如下所示:
asynchronousServerSocketChannel.accept(Void, new ConnectionHander());
Run Code Online (Sandbox Code Playgroud)
处理客户端连接ConnectionHander
的CompletionHandler的实现在哪里。
进行接受调用的线程然后可以继续做其他工作,并且 NIO API 将在建立客户端连接时处理对CompletionHandler的回调调度(我相信这是操作系统级别的中断)。
替代代码可能如下所示:
SocketChannel socketChannel = serverSocketChannel.accept();
Run Code Online (Sandbox Code Playgroud)
根据模式,调用线程现在被阻塞,直到建立或null
返回客户端连接,让您轮询。在这两种情况下,您都必须处理线程,这通常意味着更多的工作。
在一天结束时,您会根据您的特定用例进行选择,尽管我通常前者会生成更清晰、更可靠的代码。
可以设置为非阻塞模式(异步)
就在那里,您有误解。非阻塞模式不同于异步模式。
非阻塞操作要么传输数据,要么不传输数据。无论哪种情况,都没有阻塞,并且返回操作完成。此模式受SocketChannel,
DatagramSocketChannel,
和支持Selector.
异步操作在您调用该方法时开始,并在后台继续,其结果可在以后通过回调或a获得Future
。AsynchronousSocketChannel
您在问题中提到的etc类支持此模式。
归档时间: |
|
查看次数: |
2981 次 |
最近记录: |