java - 从一个线程写入套接字 channel 并从另一个线程选择

标签 java sockets nio

我可以从一个线程写入SocketChannel,而Selector#select()可能会选择相同的SocketChannel来进行IO操作其他线程?它是线程安全的吗?或者我是否必须将 ByteBuffer 委托(delegate)给其他线程(无限期地执行 Selector#select()),然后每次写入 SocketChannel Selector#select() 调用。

此外,SelectionKey#interestOps(int) 将兴趣操作设置为线程安全的吗?或者我是否必须将相同的任务委托(delegate)给其他线程(无限期地执行Selector#select())。

最佳答案

是的,一般来说可以。 select() 中被阻止的线程在被阻止时不会使用 ByteBuffer。如果它在其他地方这样做,当然您需要同步或采取其他措施。

关于java - 从一个线程写入套接字 channel 并从另一个线程选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385504/

相关文章:

java - IBM RTC Java 提供的属性。修改工作项时无法转换为 IAttribute

java - PropertyEditor 未根据 AJAX (JSON) 请求调用

java - 使用 java 套接字连接到 URL

java - 每秒多次发送多个对象的套接字

java - Solr 一次数百万个搜索查询

c - 利布夫 : SO_REUSEPORT issue in Linux

tomcat - Tomcat 中 NIO 和 BIO 之间的根本区别是什么?

java - 当没有传入连接时 SelectionKey.isAcceptable() 返回 "true"

java - 在 Tomcat 中托管 Netty 服务器是否可行/可取?

java - 使用 Spring Security 配置 Spring Boot 会使构建因引用缺少依赖项而失败