java的nio为非阻塞式socket通信提供了如下几个类:
Selector : 它是SelectableChannel对象的多路复用器,所有希望采用非阻塞方式进行通信的channel都应该注册到Selector对象。可以通过调用此类的open()静态方法来创Selector实例,该方法将使用系统默认的Selector来返回新的Selector。
Selector可以同时监控多个SelectortableChannel的IO状况,是非阻塞IO的核心。一个Selector实例有3个SelectIonKey集合
1.所有的SelectionKey集合:代表了注册在该Selector上的Channel,该集合可以通过keys()方法返回。
2.被选择的SelectionKey集合 : 代表了所有可通过select()方法获取的,需要进行IO处理的Channel,这个集合可以通过selectedKeys()返回。
3.被取消的SelectionKey集合:代表了所有被取消注册关系的Channel,在下一次执行select()方法时,这些Channel对应的SelectionKey会被彻底删除,程序通常无须