在我的应用程序中,我使用多个线程来处理客户端连接。
我在调试时发现了一个非常奇怪的行为 - 我有一个 SelectionKey,通过调用(使用调试器)它的 interestOps() 方法,返回值为 1(READ),但是当我将数据发送到与该键对应的套接字时,选择器没有醒来。。
如果使用调试器,我将特定的选择键兴趣操作更改为 1(即使它是 1),选择器会突然对该更改做出反应。
在给定时间我只有一个线程处理连接,但这个线程并不特定于该连接,如果我禁用多线程(将线程池设置为大小 1)这个问题永远不会发生。
通过查看 SelectionKey 类文档——这个方法应该是线程安全的——我错过了什么吗?