1. 程式人生 > >java非阻塞通訊學習

java非阻塞通訊學習

  java非阻塞通訊思想按照書上說的來講,就是你在燒開水也在做飯,不用找兩個人去完成這兩件事情。一個人完成這兩件事就行了,這個人不停的看水是否燒開,飯是否做好

一旦其中某個事情發生就做相應的處理。生活例子讀起來很簡單,百度了很久也沒有找到非阻塞通訊的和阻塞通訊比較的優缺點,可能由於非阻塞通訊是JSE1.4以後出現的原因吧。

  非阻塞通訊相對阻塞通訊來說要複雜很多,其中要進行非阻塞通訊程式設計必須要會使用幾個類:

1,Buffer,快取區類:ByteBuffer,CharBuffer...

2,Charset,字元編碼類

3,SelectableChannel通道類,主要有兩個子類,ServerSocketChannel和SocketChannel,在非阻塞通訊中所有資料的收發都是通過Buffer,雖然這兩個類的方法read和write都是向通道Channel直接寫入和讀取資料;還有一點就是這兩個類預設都是阻塞模式,需要手動設定為非阻塞模式,呼叫他們的configureBlocking(false)即可

4,Selector類,在阻塞通訊中式依靠事件驅動的,ServerSocketChannel和SocketChannel都要向Selector註冊相應的事件後才能夠被處理;Selector維護了三個集合,all-keys,selected-keys,canclled-keys他們都是事件的集合,事件控制代碼SelectionKey的集合

5,SelectionKey類,ServerSocketChannel和SocketChannel向Selector註冊的事件控制代碼