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 = ...; // 执行阻塞的I/O操作
return ...; // 返回结果
} finally {
end(completed);
}
end
方法的completed
参数指示I/O操作是否实际完成,即操作是否具有对调用者可见的任何效果。例如,对于读取字节的操作,如果实际传输了一些字节到调用者的目标缓冲区,则此参数应为true
。
具体的通道类还必须以这样的方式实现implCloseChannel
方法,即如果在另一个线程在通道上的本机I/O操作中被阻塞时调用它,则该操作将立即返回,通过抛出异常或正常返回。如果线程被中断或其所阻塞的通道被异步关闭,则通道的end
方法将抛出适当的异常。
该类执行实现Channel
规范所需的同步。实现implCloseChannel
方法无需与可能试图关闭通道的其他线程同步。
- 自 JDK 版本:
- 1.4
-
Constructor Details
-
AbstractInterruptibleChannel
protected AbstractInterruptibleChannel()初始化此类的新实例。
-
-
Method Details
-
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()标记可能会无限期阻塞的 I/O 操作的开始。应该与
end
方法一起使用,使用如上所示的try
...finally
块,以实现此通道的异步关闭和中断。 -
end
标记可能会无限期阻塞的 I/O 操作的结束。应该与
begin
方法一起使用,使用如上所示的try
...finally
块,以实现此通道的异步关闭和中断。- 参数:
-
completed
- 如果且仅如果 I/O 操作成功完成,即对操作的调用者可见的某些效果 - 抛出:
-
AsynchronousCloseException
- 如果通道被异步关闭 -
ClosedByInterruptException
- 如果阻塞在 I/O 操作中的线程被中断
-