概述
Java NIO非堵塞技術(shù)實(shí)際是采取反應(yīng)器模式需曾,或者說(shuō)是觀察者(observer)模式為我們監(jiān)察I/O端口猜煮,如果有內(nèi)容進(jìn)來(lái)拗胜,會(huì)自動(dòng)通知我們灵汪,這樣,我們就不必開(kāi)啟多個(gè)線程死等柑潦,從外界看享言,實(shí)現(xiàn)了流暢的I/O讀寫(xiě),不堵塞了渗鬼。
同步和異步區(qū)別:有無(wú)通知(是否輪詢)
堵塞和非堵塞區(qū)別:操作結(jié)果是否等待(是否馬上有返回值)览露,只是設(shè)計(jì)方式的不同
NIO 有一個(gè)主要的類Selector,這個(gè)類似一個(gè)觀察者譬胎,只要我們把需要探知的socketchannel告訴Selector差牛,我們接著做別的事情命锄,當(dāng)有事件發(fā)生時(shí),他會(huì)通知我們偏化,傳回一組SelectionKey脐恩,我們讀取這些Key,就會(huì)獲得我們剛剛注冊(cè)過(guò)的socketchannel侦讨,然后驶冒,我們從這個(gè)Channel中讀取數(shù)據(jù),接著我們可以處理這些數(shù)據(jù)韵卤。
反應(yīng)器模式與觀察者模式在某些方面極為相似:當(dāng)一個(gè)主體發(fā)生改變時(shí)骗污,所有依屬體都得到通知。不過(guò)沈条,觀察者模式與單個(gè)事件源關(guān)聯(lián)需忿,而反應(yīng)器模式則與多個(gè)事件源關(guān)聯(lián) 。
一般模型
我們想象以下情形:長(zhǎng)途客車在路途上蜡歹,有人上車有人下車屋厘,但是乘客總是希望能夠在客車上得到休息。
傳統(tǒng)的做法是:每隔一段時(shí)間(或每一個(gè)站)季稳,司機(jī)或售票員對(duì)每一個(gè)乘客詢問(wèn)是否下車擅这。
反應(yīng)器模式做法是:汽車是乘客訪問(wèn)的主體(Reactor),乘客上車后景鼠,到售票員(acceptor)處登記仲翎,之后乘客便可以休息睡覺(jué)去了,當(dāng)?shù)竭_(dá)乘客所要到達(dá)的目的地后铛漓,售票員將其喚醒即可溯香。