使用nio来进行多线程编程,说是噩梦真的不为过,没有使用框架真的很失误。
最近nio经常会报错:
java.nio.channels.CancelledKeyException
也看了网上的解决方法,感觉很扯淡,多线程才会经常出这个问题,给出的解决方法根本不适合多线程,然后自己在一个地方改了一下,
这几天没有再出现这个 错误了,这个方法没有经过长时间的测试和论证,只是个人好用了而已。
try {
if (key.isAcceptable()) {
// 有客户端连接请求时
protocol.handleAccept(key);
}
} catch (Exception e) {
key.cancel();
}
只是在protocol.handleAccept(key);这一步加上一个catch,捕获到异常之后,cancel这个key。