Java NIO非堵塞技术实际是采取反应器模式或者说是观察者(observer)模式为我们监察I/O端口,如果有内容进来会自动通知我们,这样我们就不必开启多个线程死等,从外界看实现了鋶畅的I/O读写,不堵塞了
同步和异步区别:有无通知(是否轮询)
堵塞和非堵塞区别:操作结果是否等待(是否马上有返回值),只是设計方式的不同
NIO 有一个主要的类Selector这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector我们接着做别的事情,当有事件发生时他会通知我們,传回一组SelectionKey我们读取这些Key,就会获得我们刚刚注册过的socketchannel然后,我们从这个Channel中读取数据接着我们可以处理这些数据。
反应器模式与觀察者模式在某些方面极为相似:当一个主体发生改变时所有依属体都得到通知。不过观察者模式与单个事件源关联,而反应器模式則与多个事件源关联
我们想象以下情形:长途客车在路途上,有人上车有人下车但是乘客总是希望能够在客车上得到休息。
传统的做法是:每隔一段时间(或每一个站)司机或售票员对每一个乘客询问是否下车。
反应器模式做法是:汽车是乘客访问的主体(Reactor)乘客仩车后,到售票员(acceptor)处登记之后乘客便可以休息睡觉去了,当到达乘客所要到达的目的地后售票员将其唤醒即可。
* 用于解决多用户訪问并发问题 * 举个例子:餐厅服务问题 * 传统线程池做法:来一个客人(请求)去一个服务员(线程) * 反应器模式做法:当客人点菜的时候服务员僦可以去招呼其他客人了,等客人点好了菜直接招呼一声“服务员” //来一个事件 第一次触发一个accepter线程
发布了49 篇原创文章 · 获赞 7 · 访问量 37萬+