Module  java.base
软件包  java.nio.channels

Interface AsynchronousChannel

  • All Superinterfaces:
    AutoCloseableChannelCloseable
    All Known Subinterfaces:
    AsynchronousByteChannel
    所有已知实现类:
    AsynchronousFileChannelAsynchronousServerSocketChannelAsynchronousSocketChannel


    public interface AsynchronousChannel
    extends Channel
    支持异步I / O操作的通道。 异步I / O操作通常采用以下两种形式之一:
    1.   Future<V> operation(...) 
    2.   void operation(... A attachment, CompletionHandler<V,? super A> handler) 
    其中操作是I / O操作的名称(例如读或写), V是I / O操作的结果类型, A是附加到I / O操作以提供上下文的对象的类型消耗结果。 对于无状态 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