Java NIO-非阻塞通道与异步通道
Java NIO提供可设置为非阻塞模式(异步)的Java NIO-非阻塞通道与异步通道,java,asynchronous,nio,channels,Java,Asynchronous,Nio,Channels,Java NIO提供可设置为非阻塞模式(异步)的SocketChannel和ServerSocketChannel。大多数操作返回一个与成功或操作尚未完成相对应的值。那么,除了回调功能外,AynchronousSocketChannel和AsynchronousServerSocketChannel的目的是什么 当使用采取适当的方法时,他们会有自己的想法 例如,服务器中的代码可能如下所示: asynchronousServerSocketChannel.accept(Void, new Conn
SocketChannel
和ServerSocketChannel
。大多数操作返回一个与成功或操作尚未完成相对应的值。那么,除了回调功能外,AynchronousSocketChannel
和AsynchronousServerSocketChannel
的目的是什么 当使用采取适当的方法时,他们会有自己的想法
例如,服务器中的代码可能如下所示:
asynchronousServerSocketChannel.accept(Void, new ConnectionHander());
其中,ConnectionHander
是一个处理客户端连接的实现
然后,发出调用的线程可以继续执行其他工作,NIOAPI将在建立客户端连接时处理回调调度(我相信这是操作系统级别的中断)
备选代码可能如下所示:
SocketChannel socketChannel = serverSocketChannel.accept();
根据模式,调用线程现在被阻塞,直到建立客户端连接或返回null
,让您进行轮询。在这两种情况下,您必须处理线程,这通常意味着更多的工作
在一天结束时,您会根据特定的用例进行选择,尽管我通常认为前者会生成更清晰、更可靠的代码
可设置为非阻塞模式(异步)
这就是你的误解。非阻塞模式不同于异步模式
非阻塞操作要么传输数据,要么不传输数据。在这两种情况下都没有阻塞,一旦返回,操作就完成了。此模式由SocketChannel、
DatagramSocketChannel、
和选择器支持。
异步操作在调用该方法时开始,并在后台继续,其结果将在稍后通过回调或Future
变得可用。您在问题中提到的AsynchronousSocketChannel
etc类支持此模式