public abstract class SelectableChannel extends AbstractInterruptibleChannel implements Channel
Selector
. The channel must be
registered with a selector by calling one of the register
methods,
which return a SelectionKey
object. In order to deregister a channel
from a selector, its selection key must be canceled. This can be done
explicitly by calling the SelectionKey.cancel()
method but it is also
done implicitly when the channel or the selector is closed.
A channel may be registered with several selectors at the same time but only once for any given selector.
Modifier | Constructor and Description |
---|---|
protected |
SelectableChannel()
Constructs a new
SelectableChannel . |
Modifier and Type | Method and Description |
---|---|
abstract Object |
blockingLock()
Gets the blocking lock which synchronizes the
configureBlocking
and register methods. |
abstract SelectableChannel |
configureBlocking(boolean block)
Sets the blocking mode of this channel.
|
abstract boolean |
isBlocking()
Indicates whether this channel is in blocking mode.
|
abstract boolean |
isRegistered()
Indicates whether this channel is registered with at least one selector.
|
abstract SelectionKey |
keyFor(Selector sel)
Gets this channel's selection key for the specified selector.
|
abstract SelectorProvider |
provider()
Gets the provider of this channel.
|
SelectionKey |
register(Selector selector,
int operations)
Registers this channel with the specified selector for the specified
interest set.
|
abstract SelectionKey |
register(Selector sel,
int ops,
Object att)
Registers this channel with the specified selector for the specified
interest set and an object to attach.
|
abstract int |
validOps()
Gets the set of valid
operations of this channel. |
begin, close, end, implCloseChannel, isOpen
protected SelectableChannel()
SelectableChannel
.public abstract Object blockingLock()
configureBlocking
and register
methods.public abstract SelectableChannel configureBlocking(boolean block) throws IOException
register
method are executing.
The new blocking mode is valid for calls to other methods that are
invoked after the call to this method. If other methods are already
executing when this method is called, they still have the old mode and
the call to this method might block depending on the implementation.block
- true
for setting this channel's mode to blocking,
false
to set it to non-blocking.ClosedChannelException
- if this channel is closed.IllegalBlockingModeException
- if block
is true
and this channel has been
registered with at least one selector.IOException
- if an I/O error occurs.public abstract boolean isBlocking()
true
if this channel is blocking, undefined if this
channel is closed.public abstract boolean isRegistered()
true
if this channel is registered, false
otherwise.public abstract SelectionKey keyFor(Selector sel)
sel
- the selector with which this channel has been registered.null
if this channel
has not been registered with sel
.public abstract SelectorProvider provider()
public final SelectionKey register(Selector selector, int operations) throws ClosedChannelException
interest set
is updated to operations
. The
returned key is canceled if the channel is closed while registering is in
progress.
Calling this method is valid at any time. If another thread executes this
method or the configureBlocking(boolean
method then this call is
blocked until the other call finishes. After that, it will synchronize on
the key set of the selector and thus may again block if other threads
also hold locks on the key set of the same selector.
Calling this method is equivalent to calling
register(selector, operations, null)
.
selector
- the selector with which to register this channel.operations
- this channel's interest set
.ClosedChannelException
- if the channel is closed.IllegalBlockingModeException
- if the channel is in blocking mode.IllegalSelectorException
- if this channel does not have the same provider as the given
selector.CancelledKeyException
- if this channel is registered but its key has been canceled.IllegalArgumentException
- if the operation given is not supported by this channel.public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
interest set
is updated to ops
and
the attached object is updated to att
. The returned key is
canceled if the channel is closed while registering is in progress.
Calling this method is valid at any time. If another thread executes this
method or the configureBlocking(boolean)
method then this call is
blocked until the other call finishes. After that, it will synchronize on
the key set of the selector and thus may again block if other threads
also hold locks on the key set of the same selector.
sel
- the selector with which to register this channel.ops
- this channel's interest set
.att
- the object to attach, can be null
.ClosedChannelException
- if this channel is closed.IllegalArgumentException
- if ops
is not supported by this channel.IllegalBlockingModeException
- if this channel is in blocking mode.IllegalSelectorException
- if this channel does not have the same provider as the given
selector.CancelledKeyException
- if this channel is registered but its key has been canceled.public abstract int validOps()
operations
of this channel.
Instances of a concrete channel class always return the same value.