1. 程式人生 > >java中的同步與非同步

java中的同步與非同步

選擇器(Selector)的作用是:將通道感興趣的事件放入佇列中,而不是馬上提交給應用程式,等已註冊的通道自己來請求處理這些事件。換句話說,就是選擇器將會隨時報告已經準備好了的通道,而且是按照先進先出的順序。那麼,選擇器是通過什麼來報告的呢?選擇鍵(SelectionKey)。選擇鍵的作用就是表明哪個通道已經做好了準備,準備幹什麼。你也許馬上會想到,那一定是已註冊的通道感興趣的事件。不錯,例如對於伺服器端serverChl來說,可以呼叫key.isAcceptable()來通知serverChl有客戶端連線請求。相應的函式還有:SelectionKey.isReadable(),SelectionKey.isWritable()
。一般的,在一個迴圈中輪詢感興趣的事件(具體可參照下面的程式碼)。如果選擇器中尚無通道已註冊事件發生,呼叫Selector.select()將阻塞,直到有事件發生為止。另外,可以呼叫 selectNow()或者select(long timeout)。前者立即返回,沒有事件時返回0值;後者等待timeout時間後返回。一個選擇器最多可以同時被63個通道一起註冊使用。