Java NIO-非阻塞通道与异步通道

Java NIO-非阻塞通道与异步通道,java,asynchronous,nio,channels,Java,Asynchronous,Nio,Channels,Java NIO提供可设置为非阻塞模式(异步)的SocketChannel和ServerSocketChannel。大多数操作返回一个与成功或操作尚未完成相对应的值。那么,除了回调功能外,AynchronousSocketChannel和AsynchronousServerSocketChannel的目的是什么 当使用采取适当的方法时,他们会有自己的想法 例如,服务器中的代码可能如下所示: asynchronousServerSocketChannel.accept(Void, new Conn

Java NIO提供可设置为非阻塞模式(异步)的
SocketChannel
ServerSocketChannel
。大多数操作返回一个与成功或操作尚未完成相对应的值。那么,除了回调功能外,
AynchronousSocketChannel
AsynchronousServerSocketChannel
的目的是什么

当使用采取适当的方法时,他们会有自己的想法

例如,服务器中的代码可能如下所示:

asynchronousServerSocketChannel.accept(Void, new ConnectionHander()); 
其中,
ConnectionHander
是一个处理客户端连接的实现

然后,发出调用的线程可以继续执行其他工作,NIOAPI将在建立客户端连接时处理回调调度(我相信这是操作系统级别的中断)

备选代码可能如下所示:

SocketChannel socketChannel = serverSocketChannel.accept();
根据模式,调用线程现在被阻塞,直到建立客户端连接或返回
null
,让您进行轮询。在这两种情况下,您必须处理线程,这通常意味着更多的工作

在一天结束时,您会根据特定的用例进行选择,尽管我通常认为前者会生成更清晰、更可靠的代码

可设置为非阻塞模式(异步)

这就是你的误解。非阻塞模式不同于异步模式

非阻塞操作要么传输数据,要么不传输数据。在这两种情况下都没有阻塞,一旦返回,操作就完成了。此模式由
SocketChannel、
DatagramSocketChannel、
选择器支持。

异步操作在调用该方法时开始,并在后台继续,其结果将在稍后通过回调或
Future
变得可用。您在问题中提到的
AsynchronousSocketChannel
etc类支持此模式