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
-
构造方法详细信息
-
AbstractInterruptibleChannel
protected AbstractInterruptibleChannel()初始化此类的新实例。
-
-
方法详情
-
close
关闭此通道。如果通道已经关闭,则此方法立即返回。否则它将通道标记为已关闭,然后调用
implCloseChannel方法以完成关闭操作。- 指定者:
close在接口AutoCloseable中- 指定者:
close在接口Channel中- 指定者:
close在接口Closeable中- 指定者:
close在接口InterruptibleChannel中- 抛出:
IOException- 如果发生 I/O 错误
-
implCloseChannel
关闭此通道。此方法由
close方法调用,以执行关闭通道的实际工作。只有在通道尚未关闭时才会调用此方法,并且永远不会调用多次。此方法的实现必须安排在此通道上的 I/O 操作中阻塞的任何其他线程立即返回,方法是抛出异常或正常返回。
- 抛出:
IOException- 如果在关闭通道时发生 I/O 错误
-
isOpen
public final boolean isOpen()从接口Channel复制的描述告知此通道是否打开。 -
begin
protected final void begin() -
end
- 参数:
completed-true当且仅当 I/O 操作成功完成时,即具有操作调用者可见的某些效果- 抛出:
AsynchronousCloseException- 如果通道被异步关闭ClosedByInterruptException- 如果在 I/O 操作中阻塞的线程被中断
-