- 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 描述 protected
AbstractInterruptibleChannel()
初始化此类的新实例。
-
-
-
方法详细信息
-
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操作中阻塞的线程中断
-
-