public abstract class AbstractInterruptibleChannel
extends Object
implements Channel, InterruptibleChannel
java.lang.Object | |
↳ | java.nio.channels.spi.AbstractInterruptibleChannel |
Known Direct Subclasses |
Known Indirect Subclasses |
可中断通道的基类实现类。
该类封装了实现通道异步关闭和中断所需的底层机器。 具体的通道类必须分别在调用可能无限期阻塞的I / O操作之前和之后调用begin
和end
方法。 为了确保始终调用end
方法,应在try内使用这些方法... finally block:
boolean completed = false; try { begin(); completed = ...; // Perform blocking I/O operation return ...; // Return result } finally { end(completed); }
The completed argument to the
end
方法告诉I / O操作是否实际完成,即它是否对调用者可见。 例如,在读取字节的操作的情况下,当且仅当某些字节实际传送到调用者的目标缓冲区时,该参数应为true 。
具体通道类还必须以这样的方式实现implCloseChannel
方法,即如果在通道上对本地I / O操作中的另一个线程进行阻塞时调用另一个线程,则该操作将立即返回,通过抛出异常或正常返回。 如果一个线程被中断或者它被阻塞的通道被异步关闭,那么通道的end
方法将抛出相应的异常。
该类执行实现Channel
规范所需的同步。 implCloseChannel
方法的实现不需要与可能试图关闭通道的其他线程同步。
Protected constructors |
|
---|---|
AbstractInterruptibleChannel() 初始化此类的新实例。 |
Public methods |
|
---|---|
final void |
close() 关闭此频道。 |
final boolean |
isOpen() 告诉这个频道是否打开。 |
Protected methods |
|
---|---|
final void |
begin() 标记可能无限期阻塞的I / O操作的开始。 |
final void |
end(boolean completed) 标记可能无限期阻塞的I / O操作的结束。 |
abstract void |
implCloseChannel() 关闭此频道。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.nio.channels.Channel
|
|
From interface java.nio.channels.InterruptibleChannel
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
void close ()
关闭此频道。
如果通道已关闭,则此方法立即返回。 否则,它将该通道标记为关闭,然后调用implCloseChannel
方法以完成关闭操作。
Throws | |
---|---|
IOException |
If an I/O error occurs |
boolean isOpen ()
告诉这个频道是否打开。
Returns | |
---|---|
boolean |
true if, and only if, this channel is open |
void begin ()
标记可能无限期阻塞的I / O操作的开始。
此方法应与 end
方法一起使用,使用 try ... finally块(如图 above)进行调用 ,以实现此通道的异步关闭和中断。
void end (boolean completed)
标记可能无限期阻塞的I / O操作的结束。
此方法应与 begin
方法一起调用,使用 try ... finally块(如图 above所示),以实现此通道的异步关闭和中断。
Parameters | |
---|---|
completed |
boolean : true if, and only if, the I/O operation completed successfully, that is, had some effect that would be visible to the operation's invoker |
Throws | |
---|---|
AsynchronousCloseException |
If the channel was asynchronously closed |
ClosedByInterruptException |
If the thread blocked in the I/O operation was interrupted |
void implCloseChannel ()
关闭此频道。
该方法由close
方法调用,以执行关闭通道的实际工作。 只有在通道尚未关闭的情况下才会调用此方法,并且不会多次调用该方法。
此方法的实现必须安排在该通道的I / O操作中阻塞的任何其他线程立即返回,或者通过抛出异常或正常返回。
Throws | |
---|---|
IOException |
If an I/O error occurs while closing the channel |