Most visited

Recently visited

Added in API level 1

AbstractInterruptibleChannel

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操作之前和之后调用beginend方法。 为了确保始终调用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方法的实现不需要与可能试图关闭通道的其他线程同步。

Summary

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

Protected constructors

AbstractInterruptibleChannel

Added in API level 1
AbstractInterruptibleChannel ()

初始化此类的新实例。

Public methods

close

Added in API level 1
void close ()

关闭此频道。

如果通道已关闭,则此方法立即返回。 否则,它将该通道标记为关闭,然后调用implCloseChannel方法以完成关闭操作。

Throws
IOException If an I/O error occurs

isOpen

Added in API level 1
boolean isOpen ()

告诉这个频道是否打开。

Returns
boolean true if, and only if, this channel is open

Protected methods

begin

Added in API level 1
void begin ()

标记可能无限期阻塞的I / O操作的开始。

此方法应与 end方法一起使用,使用 try ... finally块(如图 above)进行调用 ,以实现此通道的异步关闭和中断。

end

Added in API level 1
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

implCloseChannel

Added in API level 1
void implCloseChannel ()

关闭此频道。

该方法由close方法调用,以执行关闭通道的实际工作。 只有在通道尚未关闭的情况下才会调用此方法,并且不会多次调用该方法。

此方法的实现必须安排在该通道的I / O操作中阻塞的任何其他线程立即返回,或者通过抛出异常或正常返回。

Throws
IOException If an I/O error occurs while closing the channel

Hooray!