(1).Selector介绍

Selector称为:选择器,当然你也可以翻译为:多路复用器.它可以用一个线程,处理多个客户端的连接. Selector能够检测多个注册的通道(Channel)上是否有事件发生(多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件,然后针对每个事件进行相应的处理. 只有在连接真正有读写事件发生时,才会进行读写,大大地减少了系统开销,并且不必为每个连接创建一个线程,不用去维护多个线程. 避免了多线程之间的上下文切换导致的开销.

(2).Selector API

public abstract class Selector implements Closeable {

    // 得到一个选择器对象.
    public static Selector open();

    // 监控所有注册通道,当其中有IO操作可以进行时
    // 将对应的:SelectionKey加入到内部集合中并返回
    // 其参数:timeout用来设置超时时间.
    public abstract int selectNow();
    public abstract int select(long timeout);
    public abstract int select();

    // 从选择器(Selector)的内部集合中得到所有的事件:SelectionKey
    public abstract Set<SelectionKey> selectedKeys();
}