- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- All Implemented Interfaces:
-
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
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedAbstractInterruptibleChannel()初始化此类的新实例。
-
-
-
方法详细信息
-
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错误
-
isOpen
public final boolean isOpen()
描述从接口Channel复制告诉这个频道是否开放。
-
begin
protected final void begin()
-
end
protected final void end(boolean completed) throws AsynchronousCloseException- 参数
-
completed-true如果且仅当I / O操作成功完成,即具有对操作的调用者可见的某些效果 - 异常
-
AsynchronousCloseException- 如果通道异步关闭 -
ClosedByInterruptException- 如果在I / O操作中阻塞的线程中断
-
-