中断被阻塞的线程,等待来自Socket的输入

时间:2011-12-04 01:48:42

标签: java multithreading sockets

如果一个线程在被套接字InputStream的输入阻塞时被中断,那么该套接字的资源(例如本地端口)是否会被释放?

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

2 个答案:

答案 0 :(得分:4)

  1. 没有任何内容表明Thread.interrupt()会完全中断读取更不用说关闭套接字,除非它是{{ 1}},在这种情况下,语义清楚地记录为抛出InterruptibleChannel并关闭通道。

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

答案 1 :(得分:2)

超时本身既不会关闭套接字,也不会取消绑定端口。您需要致电socket.close()来实现这一目标。