public interface AsynchronousChannel extends Channel
Future
<V> operation(...)
void operation(... A attachment, CompletionHandler
<V,? super A> handler)
CompletionHandler
用于消耗许多I / O操作的结果的情况, CompletionHandler
很重要。
在第一种形式中,由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操作中使用的所有缓冲区,或注意确保在通道保持打开状态时不访问缓冲区。
void close() throws IOException
此通道上的任何未完成的异步操作将完成,但AsynchronousCloseException
除外 。 在关闭通道后,进一步尝试启动异步I / O操作,立即完成原因ClosedChannelException
。
该方法的行为与Channel
接口的规定完全相同。
close
在界面
AutoCloseable
close
中的
Channel
close
在接口
Closeable
IOException
- 如果发生I / O错误