我正在研究 NioWorker.run() 方法并试图了解它是如何工作的。下面是代码的简化版本:
for(;;) {
try {
SelectorUtil.select(selector);
if (wakenUp.get()) {
selector.wakeup();
}
cancelledKeys = 0;
processRegisterTaskQueue();
processWriteTaskQueue();
processSelectedKeys(selector.selectedKeys());
} catch (Throwable t) {
}
}
更不用说它的作用是什么,但是我有一些问题:
1. Selector.select(selector) 以 500 毫秒超时执行选择。为什么它不仅仅是一个阻塞调用?
2.以下片段的目的是什么?为什么我们需要执行唤醒?
if (wakenUp.get()) {
selector.wakeup();
}
提前致谢