gpt4 book ai didi

Java:SelectionKey.interestOps(int) 不是线程安全的?

转载 作者:行者123 更新时间:2023-12-01 17:30:30 26 4
gpt4 key购买 nike

在我的应用程序中,我使用多个线程来处理客户端连接。

我在调试时发现了一个非常奇怪的行为 - 我有一个 SelectionKey,通过调用(使用调试器)其interestOps() 方法,返回值为 1 (READ),但是当我将数据发送到与该键对应的套接字时选择器没有唤醒..

如果使用调试器,我将特定选择关键兴趣操作更改为 1(即使它是 1),选择器会突然对该更改使用react。

在给定时间我只有一个线程处理连接,但该线程并非特定于该连接,如果我禁用多线程(将线程池设置为大小 1),则此问题永远不会发生。

通过查看 SelectionKey 类文档 - 此方法应该是线程安全的 - 我错过了什么吗?

最佳答案

这不是线程安全的问题。如果当前有一个select(),它已经从所有注册的键中读取了所有interestOps,并在读取时选择这些值:这些值被传递给操作系统和操作系统阻塞操作正在进行中。在选择操作中间更改 interestOps 不会影响该选择操作,只会影响下一个操作。

关于Java:SelectionKey.interestOps(int) 不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523471/

26 4 0
文章推荐: java - NavigableSet 与方法参数中的 Collection 不匹配