当线程被中断同时它也阻塞了来自 Socket 的 InputStream
的输入时,该 Socket 的资源(例如本地端口)是否被释放?
我知道 Socket 有一个名为 SoTimeout
的选项。如果我设置了 SoTimeout
选项,Socket 绑定(bind)的端口是否会在超时到期时被释放?
最佳答案
没有任何内容表明
Thread.interrupt()
会中断读取,更不用说关闭套接字了,除非 它是一个InterruptibleChannel
,在这种情况下,语义被清楚地记录为抛出ClosedByInterruptException
并关闭 channel 。如果您设置套接字超时并收到
SocketTimeoutException
,则套接字保持打开状态。它的所有资源都不会被释放(包括它的端口),这意味着在 Socket 关闭之前您不能将新的 Socket 绑定(bind)到该端口。
关于java - 中断被阻塞的线程,等待来自套接字的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372624/