關於Java NIO的一些問題,求助。

小毛發表於2004-05-17
在一寫一個多使用者的Server程式。
現在的問題是在selector.select()方法上。
如果呼叫select()方法,阻塞方式等待事件,這個時候就不可以再在這個selector上註冊新的事件,我感覺是互相鎖了。
如果呼叫select(100)這樣的非阻塞方式,可以避開這個問題,但是影響效能,因為有很多空轉。

我嘗試著使用wakeup讓select()方法釋放對selector的鎖定,可是因為在while迴圈裡面執行得太快,下一個迴圈到來時候新的事件還沒有來得及註冊上結果又鎖上了。

目前使用的方法是在wakeup之後讓while迴圈sleep 10毫秒,雖然能解決這個問題,但是畢竟感覺不爽,又沒有高人能解決的。

簡單的說就是一個執行緒被select()方法掛起,另一個執行緒如果嘗試在這個selector上註冊事件則也會被掛起。

相關文章