在我的应用程序中,我使用多个线程来处理客户端连接。我有一个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