我没有使用任何选择器或类似的东西。我只有一个简单的ServerSocketChannel
监听和一个以阻塞模式连接到它的SocketChannel
。我想对连接施加超时,但 SocketChannel.socket().setSoTimeout()
不起作用。
我尝试让后台线程 hibernate 30 秒并检查变量是否仍为 null
(因为它会阻塞等待读入该变量)但我无法在我无法访问匿名类中的局部变量。
还有其他方法可以做到这一点吗?
更新:我的问题措辞有误。我还希望读取操作以及连接本身超时。
最佳答案
setSoTimeout()
设置读取超时,而不是连接超时,并且出于某种原因它在 SocketChannels
上根本不起作用,即使在阻塞模式下也是如此,并且即使是包装流。
您正在寻找的方法是带有两个参数的 channel.socket().connect()
。
关于java - 如何在阻塞模式 NIO 中实现超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120369/