前言:
传统的阻塞式网络编程
缺点:一个请求server要起一个线程,消耗资源,吞吐量有限。
1.Selector类
1.1集合
一个channel注册到Selector后,在Selector里用一个SelectionKey来表示该channel。一个Selector里有三个SelectionKey组成的集合:keys()方法
:返回所有注册到该Selector的SelectionKeyselectedKeys()方法
:返回所有注册到该Selector的SelectionKey,并且该SelectionKey对应的channel产生了Selector关注的操作。the cancelled-key set:
取消的key。取消后channel还没有取消注册,下一次select的时候才会取消注册。
1.2Selector.select()方法
三个步骤
- 清空the cancelled-key set,对应的channel取消注册。
- 访问底层操作查询注册的channel有没有产生关注的事件,如果有添加到the selected-key set
- ...
2.SelectionKey类
SelectionKey.interestOps()方法
:返回关注的操作SelectionKey.readyOps()方法
:返回已准备好的操作。
3.SelectableChannel类
SelectableChannel.register()方法
:注册到
public abstract SelectableChannel configureBlocking(boolean block)
阻塞式,非阻塞式
1.创建Selector
调用静态方法Selector.open()可以创建Selector对象。该方法只有一行代码
SelectorProvider.provider().openSelector()
SelectorProvider是spi包里的类。
|d | dd
|dd
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。