模块 java.base

类 AbstractInterruptibleChannel

java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
所有已实现的接口:
Closeable , AutoCloseable , Channel , InterruptibleChannel
已知子类:
FileChannel , SelectableChannel

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

此类封装了实现通道的异步关闭和中断所需的低级机制。具体的通道类必须在调用之前和之后分别调用 begin end 方法,调用可能无限期阻塞的 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
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
    protected
    初始化此类的新实例。
  • 方法总结

    修饰符和类型
    方法
    描述
    protected final void
    标记可能无限期阻塞的 I/O 操作的开始。
    final void
    关闭此通道。
    protected final void
    end(boolean completed)
    标记可能无限期阻塞的 I/O 操作的结束。
    protected abstract void
    关闭此通道。
    final boolean
    告知此通道是否打开。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造方法详细信息

    • AbstractInterruptibleChannel

      protected AbstractInterruptibleChannel()
      初始化此类的新实例。
  • 方法详情

    • close

      public final void close() throws IOException
      关闭此通道。

      如果通道已经关闭,则此方法立即返回。否则它将通道标记为已关闭,然后调用 implCloseChannel 方法以完成关闭操作。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Channel
      指定者:
      close 在接口 Closeable
      指定者:
      close 在接口 InterruptibleChannel
      抛出:
      IOException - 如果发生 I/O 错误
    • implCloseChannel

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

      此方法由 close 方法调用,以执行关闭通道的实际工作。只有在通道尚未关闭时才会调用此方法,并且永远不会调用多次。

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

      抛出:
      IOException - 如果在关闭通道时发生 I/O 错误
    • isOpen

      public final boolean isOpen()
      从接口 Channel 复制的描述
      告知此通道是否打开。
      指定者:
      isOpen 在接口 Channel
      返回:
      true 当且仅当此通道打开时
    • begin

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

      此方法应与 end 方法一起调用,使用 try ... finally 块(如 多于 所示),以便为此通道实现异步关闭和中断。

    • end

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

      此方法应与 begin 方法一起调用,使用 try ... finally 块(如 多于 所示),以便为此通道实现异步关闭和中断。

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