NIO 的非阻塞式網路通訊

2021-09-26 21:19:19 字數 1433 閱讀 1615

若註冊時不止監聽乙個事件,則可以使用「位或」操作符連線。

方 法描 述int interestops()

獲取感興趣事件集合

int readyops()

獲取通道已經準備就緒的操作的集合

selectablechannel channel()

獲取註冊通道

selector selector()

返回選擇器

boolean isreadable()

檢測 channal 中讀事件是否就緒

boolean iswritable()

檢測 channal 中寫事件是否就緒

boolean isconnectable()

檢測 channel 中連線是否就緒

boolean isacceptable()

檢測 channel 中接收是否就緒

方 法描 述

set keys()

所有的 selectionkey 集合。代表註冊在該selector上的channel

selectedkeys()

被選擇的 selectionkey 集合。返回此selector的已選擇鍵集

int select()

監控所有註冊的channel,當它們中間有需要處理的 io 操作時,該方法返回,並將對應得的 selectionkey 加入被選擇的selectionkey 集合中,該方法返回這些 channel 的數量。

int select(long timeout)

可以設定超時時長的 select() 操作

int selectnow()

執行乙個立即返回的 select() 操作,該方法不會阻塞執行緒

selector wakeup()

使乙個還未返回的 select() 方法立即返回

void close()

關閉該選擇器

public

void

test()

catch

(ioexception e)

}

非阻塞io,例:

public

void

client()

throws ioexception

schannel.

close()

;}

public

void

server()

throws ioexception

else

if(sk.

isreadable()

)}// 取消選擇鍵

iterator.

remove()

;}}}

NIO的非阻塞式網路通訊

虛擬記憶體被作業系統劃分成兩塊 核心空間和使用者空間,核心空間是核心 執行的地方,使用者空間是使用者程式 執行的地方。當程序執行在核心空間時就處於核心態,當程序執行在使用者空間時就處於使用者態。服務端會判斷核心位址空間有沒有資料,如果沒有資料的話,此時的服務端就處於等待狀態。後來,我們想到使用多執行...

NIO實現非阻塞式Socket通訊

filechannel 由上圖可知道,該channel 只有阻塞模式。datagramchannel socketchannel serversocketchannel 三個網路channel 可以通過configureblocking 方法,設定非阻塞模式 nio 只有在 網路中,使用select...

2 1 NIO網路通訊

selector的應用 非阻塞nio的demo 基於serversocketchannel 非阻塞nio的demo 基於datagramchannel 前文 1.1 nio 和 bio 對比分析,引出 nio 介紹了他們的區別,該篇介紹 如何使用nio進行網路通訊.nio中,執行緒通常將非阻塞 io...