java nio 高级

来源:互联网 发布:淘宝充值软件利润 编辑:程序博客网 时间:2024/06/13 22:30

非阻塞io:传统的读写会发生阻塞,server/client每个请求产生一个线程,导致线程数量增大

一般采用线程池模型,并且会限制线程池的大小。

非阻塞io采用reactor模式,io调用不会被阻塞,相反会注册感兴趣的特定io事件。(可读数据到达,新的连接建立)

发生特定事件,系统通知。

非阻塞io核心对象是selector,用来注册io事件并且通知事件发生。

当有事件发生时,从selector获取selectorkey。从selectorkey中找出事件和事件发生具体的selectableChannel。

获取客户端发送过来的数据。

二。使用nio编写服务器程序,步骤如下:

向selector对象注册感兴趣的事件,从selector获取感兴趣的事件,根据不同的事件进行相应的处理。

创建serverSocketChannel对象,调用configuringblocking方法,配置为非阻塞模式,向selector注册事件,从selector获取感兴趣的事件

内部循环模式:调用select方法,直到有一个事件发生,调用selectKey方法获取发生事件的selectionkey,在使用迭代器进行循环处理

三。java io和nio区别

阻塞io产生大量线程,带来频繁的上下文切换。

nio:有一个专门的线程处理io分发,事件驱动,事件到时触发不是同步监视。

java nio采用双向通道进行数据传输,而不是单向的流。



0 0