在我的應用程序中,我使用多個線程來處理客戶端連接。我有一個SelectionKey,通過調用(使用調試器)它的interestOps()方法的返回值是1(READ),但是當我發送數據到相應的套接字鍵選擇器不會醒來。Java:SelectionKey.interestOps(int)不是線程安全的?
如果使用調試器,我將特定的選擇鍵興趣ops更改爲1(即使它是1),選擇器突然對這種更改作出反應。
我只有一個線程在給定時間處理連接,但是此線程不是特定於該連接的,如果禁用多線程(將線程池設置爲1號大小),則永遠不會發生此問題。
通過查看SelectionKey類文檔 - 此方法應該是線程安全的 - 我錯過了什麼嗎?
兩者你真的步入源代碼? javadoc並不總是提到一個方法是否是線程安全的。 – user1329572 2012-07-17 13:31:06
@ user1329572是的,該方法做了2件重要的事情 - 更改自己感興趣的操作字段,然後調用通道的translateAndSetInterestOps方法 - 這是我認爲問題發生的地方,但正如我所說 - 我只有一個線程處理連接時間,我也在同步密鑰時更改其interestOp,但沒有修復bug .. – bennyl 2012-07-17 13:37:47