AsynchronousChannel
Future<V> operation(...)
void operation(... A attachment, CompletionHandler<V,? super A> handler)
CompletionHandler
来消耗许多I / O操作的结果的情况,附件很重要。
在第一种形式中, Future接口定义的方法可用于检查操作是否已完成,等待其完成,以及检索结果。 在第二种形式中,调用CompletionHandler以在完成或失败时使用I / O操作的结果。
实现此接口的通道是异步可关闭的 :如果通道上的I / O操作未完成且调用了通道的close方法,则I / O操作将失败,异常为AsynchronousCloseException 。
异步通道可以安全地由多个并发线程使用。 某些通道实现可能支持并发读取和写入,但可能不允许在任何给定时间进行多次读取和一次写入操作。
消除
Future
接口定义了取消执行的cancel方法。 这会导致等待I / O操作结果的所有线程抛出CancellationException 。 是否可以取消基础I / O操作是高度特定于实现的,因此未指定。 如果取消使信道或其所连接的实体处于不一致状态,则通道将进入特定于实现的错误状态 ,以防止进一步尝试启动类似于已取消操作的I / O操作。 例如,如果读取操作被取消但实现不能保证尚未从通道读取字节,则它将通道置于错误状态; 进一步尝试启动read
操作会导致抛出未指定的运行时异常。 类似地,如果取消写操作但实现不能保证字节尚未写入通道,则后续尝试启动write
将失败,并带有未指定的运行时异常。
其中cancel方法与调用mayInterruptIfRunning
参数集true
则I / O操作可以通过关闭通道被中断。 在这种情况下,等待I / O操作结果的所有线程抛出CancellationException
以及通道上未完成的任何其他I / O操作,但异常为AsynchronousCloseException 。
如果调用cancel
方法取消读取或写入操作,则建议丢弃或注意I / O操作中使用的所有缓冲区,以确保在通道保持打开状态时不访问缓冲区。
推荐阅读