Class AbstractInterruptibleChannel
- All Implemented Interfaces:
Closeable,AutoCloseable,Channel,InterruptibleChannel
- Direct Known Subclasses:
FileChannel,SelectableChannel
public abstract class AbstractInterruptibleChannel extends Object implements Channel, InterruptibleChannel
AbstractInterruptibleChannel is the root class for interruptible
channels.
The basic usage pattern for an interruptible channel is to invoke
begin() before any I/O operation that potentially blocks
indefinitely, then end(boolean) after completing the operation. The
argument to the end method should indicate if the I/O operation has
actually completed so that any change may be visible to the invoker.
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractInterruptibleChannel() -
Method Summary
Modifier and Type Method Description protected voidbegin()Indicates the beginning of a code section that includes an I/O operation that is potentially blocking.voidclose()Closes an open channel.protected voidend(boolean success)Indicates the end of a code section that has been started withbegin()and that includes a potentially blocking I/O operation.protected abstract voidimplCloseChannel()Implements the channel closing behavior.booleanisOpen()Returns true if this channel is open.
-
Constructor Details
-
AbstractInterruptibleChannel
protected AbstractInterruptibleChannel()
-
-
Method Details
-
isOpen
public final boolean isOpen()Description copied from interface:ChannelReturns true if this channel is open. -
close
Closes an open channel. If the channel is already closed then this method has no effect, otherwise it closes the receiver via theimplCloseChannelmethod.If an attempt is made to perform an operation on a closed channel then a
ClosedChannelExceptionis thrown.If multiple threads attempt to simultaneously close a channel, then only one thread will run the closure code and the others will be blocked until the first one completes.
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceChannel- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceInterruptibleChannel- Throws:
IOException- if a problem occurs while closing this channel.- See Also:
Channel.close()
-
begin
protected final void begin()Indicates the beginning of a code section that includes an I/O operation that is potentially blocking. After this operation, the application should invoke the correspondingend(boolean)method. -
end
Indicates the end of a code section that has been started withbegin()and that includes a potentially blocking I/O operation.- Parameters:
success- passtrueif the blocking operation has succeeded and has had a noticeable effect;falseotherwise.- Throws:
AsynchronousCloseException- if this channel is closed by another thread while this method is executing.ClosedByInterruptException- if another thread interrupts the calling thread while this method is executing.
-
implCloseChannel
Implements the channel closing behavior.Closes the channel with a guarantee that the channel is not currently closed through another invocation of
close()and that the method is thread-safe.Any outstanding threads blocked on I/O operations on this channel must be released with either a normal return code, or by throwing an
AsynchronousCloseException.- Throws:
IOException- if a problem occurs while closing the channel.
-