- ClosedSelectorException
- 异常说明:当尝试在已经关闭的Selector上执行操作时抛出此异常。例如,在Selector已经被调用
close()
方法后,又调用其select()
等方法。
- 处理思路:在使用Selector的方法前,先通过
isOpen()
方法检查Selector是否处于打开状态。例如:
Selector selector = Selector.open();
// 假设在某个逻辑中可能关闭了selector
if (selector.isOpen()) {
selector.select();
}
- CancelledKeyException
- 异常说明:当在Selector上操作一个已经被取消的SelectionKey时抛出此异常。比如,在从Selector的已选择键集中获取到一个键,而在处理该键之前,该键对应的通道已经关闭或者键本身被取消。
- 处理思路:在处理SelectionKey时,先检查其是否有效。例如:
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
while (keyIterator.hasNext()) {
SelectionKey key = keyIterator.next();
if (key.isValid()) {
// 处理键的逻辑,如读/写操作等
if (key.isReadable()) {
// 读操作处理
} else if (key.isWritable()) {
// 写操作处理
}
}
keyIterator.remove();
}