-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
- All Known Subinterfaces:
-
AsynchronousByteChannel
public interface AsynchronousChannel extends Channel
支持异步I / O操作的通道。 异步I / O操作通常采用以下两种形式之一: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操作中使用的所有缓冲区,或注意确保在通道保持打开状态时不访问缓冲区。- 从以下版本开始:
- 1.7
-
-
方法详细信息
-
close
void close() throws IOException
关闭此频道。此通道上的任何未完成的异步操作将完成,异常情况为
AsynchronousCloseException
。 关闭通道后,进一步尝试启动异步I / O操作,立即完成原因ClosedChannelException
。该方法的行为与
Channel
接口的规定完全相同。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Channel
- Specified by:
-
close
在接口Closeable
- 异常
-
IOException
- 如果发生I / O错误
-
-