Module java.base

Interface AsynchronousChannel

所有超级接口:
AutoCloseable, Channel, Closeable
所有已知子接口:
AsynchronousByteChannel
所有已知实现类:
AsynchronousFileChannel, AsynchronousServerSocketChannel, AsynchronousSocketChannel

public interface AsynchronousChannel extends 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接口定义的方法来检查操作是否已完成,等待其完成,并检索结果。在第二种形式中,当I/O操作完成或失败时,将调用CompletionHandler来消耗I/O操作的结果。

实现此接口的通道是异步可关闭的:如果通道上有未完成的I/O操作,并且调用了通道的close方法,则I/O操作将失败,并引发异常AsynchronousCloseException

异步通道可安全地供多个并发线程使用。一些通道实现可能支持并发读取和写入,但可能不允许在任何给定时间有多个读取和写入操作处于未完成状态。

取消

Future接口定义了cancel方法来取消执行。这会导致所有等待I/O操作结果的线程抛出CancellationException。底层I/O操作是否可以取消高度取决于实现,因此未指定。如果取消导致通道或其连接的实体处于不一致状态,则通道将进入实现特定的错误状态,阻止进一步尝试启动与被取消操作相似的I/O操作。例如,如果取消读取操作,但实现无法保证已从通道读取字节,则会将通道置于错误状态;进一步尝试启动read操作将导致抛出未指定的运行时异常。类似地,如果取消写入操作,但实现无法保证已向通道写入字节,则后续尝试启动write将失败,并引发未指定的运行时异常。

如果使用 mayInterruptIfRunning参数调用cancel方法,则可以通过关闭通道来中断I/O操作。在这种情况下,所有等待I/O操作结果的线程都会抛出CancellationException,通道上的任何其他未完成的I/O操作都将以异常AsynchronousCloseException完成。

如果调用cancel方法取消读取或写入操作,则建议丢弃所有用于I/O操作的缓冲区,或者在通道保持打开状态时确保不访问这些缓冲区。

自版本:
1.7
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    close()
    关闭此通道。

    Methods declared in interface java.nio.channels.Channel

    isOpen