模块  java.base
软件包  java.nio.channels

Interface AsynchronousChannel

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

    public interface AsynchronousChannelextends Channel
    支持异步I / O操作的通道。 异步I / O操作通常采用以下两种形式之一:
    1.   Future<V> operation(...) 
    2.   void operation(... A attachment, CompletionHandler<V,? super A> handler) 
    其中operation是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