MST

星途 面试题库

面试题:Java中NIO Selector常见的运行时异常及处理方式

在Java NIO中使用Selector时,可能会遇到哪些常见的运行时异常?针对这些异常,一般应该如何进行处理以确保程序的健壮性?请至少列举两个常见异常及其处理思路。
48.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. ClosedSelectorException
    • 异常说明:当尝试在已经关闭的Selector上执行操作时抛出此异常。例如,在Selector已经被调用close()方法后,又调用其select()等方法。
    • 处理思路:在使用Selector的方法前,先通过isOpen()方法检查Selector是否处于打开状态。例如:
Selector selector = Selector.open();
// 假设在某个逻辑中可能关闭了selector
if (selector.isOpen()) {
    selector.select();
}
  1. 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();
}