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

Class AbstractInterruptibleChannel

  • All Implemented Interfaces:
    CloseableAutoCloseableChannelInterruptibleChannel
    已知直接子类:
    FileChannelSelectableChannel


    public abstract class AbstractInterruptibleChannel
    extends Object
    implements Channel, InterruptibleChannel
    可中断通道的基本实现类。

    该类封装了实现异步关闭和中断通道所需的低级机器。 具体的通道类必须分别调用beginend方法,调用可能无限期阻塞的I / O操作。 为了确保总是调用end方法,这些方法应该在一个try ... finally块内使用:

     boolean completed = false;
     try {
         begin();
         completed = ...;    // Perform blocking I/O operation
         return ...;         // Return result
     } finally {
         end(completed);
     }

    end方法的completed参数说明I / O操作是否实际完成,即是否具有对调用者可见的任何影响。 例如,在读取字节的操作的情况下,如果仅当某些字节实际传输到调用者的目标缓冲区中时,该参数应为true

    具体的通道类还必须实现implCloseChannel方法,如果在通道上的本地I / O操作中阻止另一个线程时被调用,则该操作将立即返回,通过抛出异常或正常返回。 如果一个线程被中断或被阻塞的通道异步关闭,那么通道的end方法将抛出适当的异常。

    该类执行实现Channel规范所需的同步。 implCloseChannel方法的实现不需要与可能尝试关闭通道的其他线程同步。

    从以下版本开始:
    1.4
    • 构造方法详细信息

      • AbstractInterruptibleChannel

        protected AbstractInterruptibleChannel​()
        初始化此类的新实例。
    • 方法详细信息

      • implCloseChannel

        protected abstract void implCloseChannel​()
                                          throws IOException
        关闭此频道。

        该方法由close方法调用,以执行关闭通道的实际工作。 该方法仅在通道尚未关闭的情况下被调用,并且不会多次调用。

        该方法的实现必须安排在该通道上被I / O操作阻塞的任何其他线程立即返回,通过抛出异常或返回正常。

        异常
        IOException - 如果在关闭通道时发生I / O错误
      • isOpen

        public final boolean isOpen​()
        描述从接口Channel复制
        告诉这个频道是否开放。
        Specified by:
        isOpen在接口 Channel
        结果
        true如果,只有这个频道是开放的
      • begin

        protected final void begin​()
        标记可能无限期阻止的I / O操作的开始。

        该方法应与串联调用end方法,使用try ... finally块如图above ,为了实现此通道异步关闭和中断。

      • end

        protected final void end​(boolean completed)
                          throws AsynchronousCloseException
        标记可能无限期阻止的I / O操作的结束。

        该方法应与begin方法一起调用,使用try ... finally块如above所示,以实现此通道的异步关闭和中断。

        参数
        completed - true如果且仅当I / O操作成功完成,即具有对操作的调用者可见的某些效果
        异常
        AsynchronousCloseException - 如果通道异步关闭
        ClosedByInterruptException - 如果在I / O操作中阻塞的线程中断