Selector позволяет одному потоку обрабатывать множество каналов (network connections).
Selector selector = Selector.open();
channel.register(selector, SelectionKey.OP_READ);
while (true) {
selector.select(); // блокируется до события
Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isReadable()) {
// обработка чтения
}
}
}
Один поток может обслуживать тысячи соединений. Это основа high-performance серверов (Netty, Tomcat NIO).
🐸 Библиотека собеса по Java
#core