- 已知子类:
AbstractSelectionKey
SelectableChannel 与 Selector 注册的令牌。
每次使用选择器注册通道时都会创建一个选择键。密钥保持有效,直到它被取消通过调用其 cancel 方法、关闭其通道或关闭其选择器。取消键不会立即将其从选择器中删除;它被添加到选择器的 取消键集 中,以便在下一次选择操作期间删除。可以通过调用其 isValid 方法来测试密钥的有效性。
一个选择键包含两个操作集表示为整数值。操作集的每一位表示密钥通道支持的一类可选操作。
这兴趣集确定下次调用选择器的选择方法之一时将测试哪些操作类别的准备情况。兴趣集使用创建键时给定的值进行初始化;稍后可能会通过
interestOps(int)方法进行更改。这准备就绪标识键的选择器已检测到键的通道已准备就绪的操作类别。创建密钥时,就绪集被初始化为零;它可能稍后在选择操作期间由选择器更新,但不能直接更新。
选择键的就绪集指示其通道已为某个操作类别准备就绪,这是一个提示,但不是保证,线程可以执行此类类别中的操作而不会导致线程阻塞。就绪集最有可能在选择操作完成后立即准确。它很可能因外部事件和在相应通道上调用的 I/O 操作而变得不准确。
此类定义了所有已知的操作集位,但给定通道支持哪些位取决于通道的类型。 SelectableChannel 的每个子类都定义了一个 validOps() 方法,该方法返回一个集合,仅标识通道支持的那些操作。尝试设置或测试键通道不支持的操作设置位将导致相应的运行时异常。
通常需要将一些特定于应用程序的数据与选择键相关联,例如表示更高级别协议状态并处理就绪通知以实现该协议的对象。因此选择键支持依恋单个任意对象到一个键。可以通过 attach 方法附加对象,然后通过 attachment 方法检索对象。
选择键可以安全地供多个并发线程使用。选择操作将始终使用操作开始时的当前兴趣设置值。
- 自从:
- 1.4
- 参见:
-
字段摘要
字段修饰符和类型Field描述static final int套接字接受操作的操作设置位。static final int套接字连接操作的操作设置位。static final int读操作的操作设置位。static final int写操作的操作设置位。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述final Object将给定对象附加到此键。final Object检索当前附件。abstract voidcancel()请求取消此键的通道与其选择器的注册。abstract SelectableChannelchannel()返回为其创建此键的通道。abstract int检索此密钥的兴趣集。abstract SelectionKeyinterestOps(int ops) 将此键的兴趣集设置为给定值。intinterestOpsAnd(int ops) 以原子方式将此键的兴趣集设置为现有兴趣集和给定值的按位交集(“和”)。intinterestOpsOr(int ops) 以原子方式将此键的兴趣集设置为现有兴趣集和给定值的按位并集(“或”)。final boolean测试此键的通道是否准备好接受新的套接字连接。final boolean测试此键的通道是否已完成或未能完成其套接字连接操作。final boolean测试此键的通道是否已准备好读取。abstract booleanisValid()告知此密钥是否有效。final boolean测试此密钥的通道是否已准备好写入。abstract intreadyOps()检索此键的就绪操作集。abstract Selectorselector()返回为其创建此键的选择器。
-
字段详细信息
-
OP_READ
public static final int OP_READ读操作的操作设置位。假设选择键的兴趣集在 选择操作 的开头包含
OP_READ。如果选择器检测到相应的通道已准备好读取、已到达流结束、已远程关闭以进行进一步写入或有待处理的错误,那么它会将OP_READ添加到键的就绪操作集中。- 参见:
-
OP_WRITE
public static final int OP_WRITE写操作的操作设置位。假设选择键的兴趣集在 选择操作 的开头包含
OP_WRITE。如果选择器检测到相应的通道已准备好写入、已远程关闭以供进一步读取或有待处理的错误,那么它会将OP_WRITE添加到键的就绪集中。- 参见:
-
OP_CONNECT
public static final int OP_CONNECT套接字连接操作的操作设置位。假设选择键的兴趣集在 选择操作 的开头包含
OP_CONNECT。如果选择器检测到相应的套接字通道已准备好完成其连接序列,或者有一个错误未决,那么它会将OP_CONNECT添加到键的就绪集中。- 参见:
-
OP_ACCEPT
public static final int OP_ACCEPT套接字接受操作的操作设置位。假设选择键的兴趣集在 选择操作 的开头包含
OP_ACCEPT。如果选择器检测到相应的服务套接字通道已准备好接受另一个连接,或者有一个错误未决,那么它会将OP_ACCEPT添加到键的就绪集中。- 参见:
-
-
构造方法详细信息
-
SelectionKey
protected SelectionKey()构造此类的实例。
-
-
方法详情
-
channel
返回为其创建此键的通道。即使在取消密钥后,此方法也会继续返回通道。- 返回:
- 这把钥匙的通道
-
selector
返回为其创建此键的选择器。即使在键被取消后,此方法也会继续返回选择器。- 返回:
- 这个键的选择器
-
isValid
public abstract boolean isValid()告知此密钥是否有效。密钥在创建时有效,并一直有效,直到它被取消、它的通道被关闭或者它的选择器被关闭。
- 返回:
true当且仅当此密钥有效
-
cancel
public abstract void cancel()请求取消此键的通道与其选择器的注册。返回后,密钥将无效,并将被添加到其选择器的已取消密钥集中。在下一次选择操作期间,该键将从所有选择器的键集中删除。如果此键已被取消,则调用此方法无效。一旦取消,密钥将永远无效。
可以随时调用此方法。它在选择器的取消键集上同步,因此如果与涉及同一选择器的取消或选择操作同时调用,可能会短暂阻塞。
-
interestOps
public abstract int interestOps()检索此密钥的兴趣集。保证返回的集合将只包含对该密钥的通道有效的操作位。
- 返回:
- 此键的兴趣集
- 抛出:
CancelledKeyException- 如果此键已被取消
-
interestOps
将此键的兴趣集设置为给定值。可以随时调用此方法。如果在进行选择操作时调用此方法,则它对该操作没有影响;键的兴趣集的更改将在下一个选择操作中看到。
- 参数:
ops- 新兴趣集- 返回:
- 这个选择键
- 抛出:
IllegalArgumentException- 如果集合中的某个位不对应于此键通道支持的操作,即如果(ops & ~channel().validOps()) != 0CancelledKeyException- 如果此键已被取消
-
interestOpsOr
public int interestOpsOr(int ops) 以原子方式将此键的兴趣集设置为现有兴趣集和给定值的按位并集(“或”)。此方法保证相对于对此方法或interestOpsAnd(int)的其他并发调用是原子的。可以随时调用此方法。如果在进行选择操作时调用此方法,则它对该操作没有影响;键的兴趣集的更改将在下一个选择操作中看到。
- 实现要求:
-
默认实现在此键上同步并调用
interestOps()和interestOps(int)来检索和设置此键的兴趣集。 - 参数:
ops- 要申请的利息集- 返回:
- 之前的兴趣集
- 抛出:
IllegalArgumentException- 如果集合中的某个位不对应于此键通道支持的操作,即如果(ops & ~channel().validOps()) != 0CancelledKeyException- 如果此键已被取消- 自从:
- 11
-
interestOpsAnd
public int interestOpsAnd(int ops) 以原子方式将此键的兴趣集设置为现有兴趣集和给定值的按位交集(“和”)。此方法保证相对于对此方法或interestOpsOr(int)的其他并发调用是原子的。可以随时调用此方法。如果在进行选择操作时调用此方法,则它对该操作没有影响;键的兴趣集的更改将在下一个选择操作中看到。
- API 注意:
-
与
interestOps(int)和interestOpsOr(int)方法不同,当使用与此键的通道支持的操作不对应的兴趣集中的位调用时,此方法不会抛出IllegalArgumentException。这是为了允许使用按位补码值清除兴趣集中的操作位,例如,interestOpsAnd(~SelectionKey.OP_READ)将从兴趣集中删除OP_READ而不影响其他位。 - 实现要求:
-
默认实现在此键上同步并调用
interestOps()和interestOps(int)来检索和设置此键的兴趣集。 - 参数:
ops- 要申请的利息集- 返回:
- 之前的兴趣集
- 抛出:
CancelledKeyException- 如果此键已被取消- 自从:
- 11
-
readyOps
public abstract int readyOps()检索此键的就绪操作集。保证返回的集合将只包含对该密钥的通道有效的操作位。
- 返回:
- 该键的准备操作集
- 抛出:
CancelledKeyException- 如果此键已被取消
-
isReadable
public final boolean isReadable()测试此键的通道是否已准备好读取。调用
k.isReadable()形式的方法的行为与表达式完全相同k.readyOps() & OP_READ != 0如果此键的通道不支持读取操作,则此方法始终返回
false。- 返回:
true当且仅当readyOps() & OP_READ非零- 抛出:
CancelledKeyException- 如果此键已被取消
-
isWritable
public final boolean isWritable()测试此密钥的通道是否已准备好写入。调用
k.isWritable()形式的方法的行为与表达式完全相同k.readyOps() & OP_WRITE != 0如果此键的通道不支持写入操作,则此方法始终返回
false。- 返回:
true当且仅当readyOps() & OP_WRITE非零- 抛出:
CancelledKeyException- 如果此键已被取消
-
isConnectable
public final boolean isConnectable()测试此键的通道是否已完成或未能完成其套接字连接操作。调用
k.isConnectable()形式的方法的行为与表达式完全相同k.readyOps() & OP_CONNECT != 0如果此键的通道不支持套接字连接操作,则此方法始终返回
false。- 返回:
true当且仅当readyOps() & OP_CONNECT非零- 抛出:
CancelledKeyException- 如果此键已被取消
-
isAcceptable
public final boolean isAcceptable()测试此键的通道是否准备好接受新的套接字连接。调用
k.isAcceptable()形式的方法的行为与表达式完全相同k.readyOps() & OP_ACCEPT != 0如果此密钥的通道不支持套接字接受操作,则此方法始终返回
false。- 返回:
true当且仅当readyOps() & OP_ACCEPT非零- 抛出:
CancelledKeyException- 如果此键已被取消
-
attach
将给定对象附加到此键。稍后可以通过
attachment方法检索附加对象。一次只能附加一个对象;调用此方法会导致丢弃任何先前的附件。当前附件可以通过附加null来丢弃。- 参数:
ob- 要附加的对象;可能是null- 返回:
-
先前附加的对象(如果有),否则为
null
-
attachment
检索当前附件。- 返回:
-
当前附加到此键的对象,如果没有附件则为
null
-