- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- 实现的所有接口
-
Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
- 已知直接子类:
-
FileChannel
,SelectableChannel
public abstract class AbstractInterruptibleChannel extends Object implements Channel, InterruptibleChannel
可中断通道的基本实现类。该类封装了实现异步关闭和通道中断所需的低级机制。 具体的通道类必须分别在调用可能无限期阻塞的I / O操作之前和之后调用
begin
和end
方法。 为了确保始终调用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
AbstractInterruptibleChannel()
初始化此类的新实例。
-
方法摘要
所有方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 protected void
begin()
标记可能无限期阻塞的I / O操作的开始。void
close()
关闭此频道。protected void
end(boolean completed)
标记可能无限期阻塞的I / O操作的结束。protected abstract void
implCloseChannel()
关闭此频道。
-
-
-
方法详细信息
-
close
public final void close() throws IOException
关闭此频道。如果通道已经关闭,则此方法立即返回。 否则,它将通道标记为已关闭,然后调用
implCloseChannel
方法以完成关闭操作。- Specified by:
-
close
在界面AutoCloseable
- Specified by:
-
close
在界面Channel
- Specified by:
-
close
在接口Closeable
- Specified by:
-
close
在界面InterruptibleChannel
- 异常
-
IOException
- 如果发生I / O错误
-
implCloseChannel
protected abstract void implCloseChannel() throws IOException
关闭此频道。close
方法调用此方法以执行关闭通道的实际工作。 仅当通道尚未关闭时才会调用此方法,并且永远不会多次调用此方法。此方法的实现必须安排在此通道上的I / O操作中阻塞的任何其他线程立即返回,方法是抛出异常或正常返回。
- 异常
-
IOException
- 如果关闭通道时发生I / O错误
-
begin
protected final void begin()
-
end
protected final void end(boolean completed) throws AsynchronousCloseException
标记可能无限期阻塞的I / O操作的结束。应使用
try
...finally
块与427951120281方法一起调用此方法,如图above所示,以实现此通道的异步关闭和中断。- 参数
-
completed
-true
当且仅当I / O操作成功完成时,即具有操作调用者可见的某些效果 - 异常
-
AsynchronousCloseException
- 如果通道异步关闭 -
ClosedByInterruptException
- 如果在I / O操作中被阻塞的线程被中断
-
-