java - 中断被阻塞的线程,等待来自套接字的输入

标签 java multithreading sockets

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

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

最佳答案

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

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

关于java - 中断被阻塞的线程,等待来自套接字的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372624/

相关文章:

c - 合适的线程数是多少

multithreading - 在Logback中记录并行线程

c - 检查信号量值时是什么阻止了竞争条件?

c++ - 绑定(bind) falis 以绑定(bind) (TCP) 并返回 -1

python - python 的 select() 与部分 recv() 在 SSL 套接字上的行为

java - jdbcTemplate执行完查询后如何在Spring Boot中关闭连接?

eclipse中的JavaFX找不到外部jar

c - Linux 套接字 (AF_UNIX) 连接 () 失败

java - 如何从文本中删除特定的重复字符?

java - logback:使用 groovy 配置时如何区分测试和主要日志记录?