当socket.close()抛出Java时我能做些什么?

And*_*lov 13 java sockets multithreading exception

一周前开始学习java,并决定学习使用异常的正确方法.Java真的让我很生气,因为它指定了方法可以作为其签名的一部分抛出的异常.

我目前正在尝试为客户端 - 服务器应用程序实现多线程服务器.我很惊讶事实socket.close()可以抛出IOException.问题是,如果它发生了我该怎么办?

...
final Socket socket = .... // at this point I know that I have a good socket
try {
  ..... // communicating with someone on that side....
} catch(IOException e) {
  // communication failed
  // this fact is useful, I can log it
  // and will just hang up
} finally {
  try {
    socket.close(); // bye-bye
  } catch(IOException e) {
    // anything but logging I can do here?
  }
}
...
Run Code Online (Sandbox Code Playgroud)

这段代码是一个单独的线程中执行,所以我必须赶上所有的异常.这个问题主要是心理问题 - 我知道,我可以把catch块留空,但我试图避免这个伎俩.

有什么想法吗?

Joa*_*uer 13

在关闭资源失败时,您不做任何重大操作是很常见的.记录可能是个好主意,因此您有机会了解它是否经常发生.

如果关闭资源也是"提交"或以某种其他方式持续更改,则会有所不同:那么您需要像处理任何其他部分中的异常一样对待它:处理它.

请注意,Java 7引入了自动资源管理,专门用于简化这些类型的构造.如果你现在学习Java,那么我建议你选择最新的和最好的.