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

Class AbstractInterruptibleChannel

  • 实现的所有接口
    CloseableAutoCloseableChannelInterruptibleChannel
    已知直接子类:
    FileChannelSelectableChannel

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

    该类封装了实现异步关闭和通道中断所需的低级机制。 具体的通道类必须分别在调用可能无限期阻塞的I / O操作之前和之后调用beginend方法。 为了确保始终调用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错误
      • begin

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

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

      • end

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

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

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