【问题标题】:Interrupting Threads that are blocked, waiting for input from a Socket中断被阻塞的线程,等待来自 Socket 的输入
【发布时间】:2011-12-04 01:48:41
【问题描述】:

当一个线程在阻塞来自 Socket 的InputStream 的输入的同时被中断时,该 Socket 的资源(例如本地端口)是否被释放?

我知道 Socket 有一个名为 SoTimeout 的选项。如果我设置了SoTimeout选项,超时后Socket绑定的端口是否会被释放?

【问题讨论】:

  • 取决于您的代码在捕获异常时会做什么

标签: java multithreading sockets


【解决方案1】:
  1. 没有什么说Thread.interrupt() 会中断读取更不用说关闭套接字了,除非它是一个InterruptibleChannel,在这种情况下,语义被明确记录为抛出ClosedByInterruptException 并关闭通道。

  2. 如果设置套接字超时并获得SocketTimeoutException,则套接字保持打开状态。它的任何资源都不会被释放(包括它的端口),这意味着在 Socket 关闭之前,您无法将新的 Socket 绑定到该端口。

【讨论】:

    【解决方案2】:

    超时本身既不会关闭 Socket,也不会解除绑定端口。您需要致电 socket.close() 来完成此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2017-01-01
      • 2014-07-01
      相关资源
      最近更新 更多