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.
Modifier | Constructor and Description |
---|---|
protected |
AbstractInterruptibleChannel() |
Modifier and Type | Method and Description |
---|---|
protected void |
begin()
Indicates the beginning of a code section that includes an I/O operation
that is potentially blocking.
|
void |
close()
Closes an open channel.
|
protected void |
end(boolean success)
Indicates the end of a code section that has been started with
begin() and that includes a potentially blocking I/O operation. |
protected abstract void |
implCloseChannel()
Implements the channel closing behavior.
|
boolean |
isOpen()
Returns true if this channel is open.
|
public final boolean isOpen()
Channel
public final void close() throws IOException
implCloseChannel
method.
If an attempt is made to perform an operation on a closed channel then a
ClosedChannelException
is 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.
close
in interface Closeable
close
in interface AutoCloseable
close
in interface Channel
close
in interface InterruptibleChannel
IOException
- if a problem occurs while closing this channel.Channel.close()
protected final void begin()
end(boolean)
method.protected final void end(boolean success) throws AsynchronousCloseException
begin()
and that includes a potentially blocking I/O operation.success
- pass true
if the blocking operation has succeeded and
has had a noticeable effect; false
otherwise.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.protected abstract void implCloseChannel() throws IOException
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
.
IOException
- if a problem occurs while closing the channel.