服务器崩溃时线程发生了什么?

时间:2017-06-29 05:53:27

标签: java multithreading client-server

让我们说我正在关注客户端 - 服务器模型,以及一个客户端,它实际上是一个线程,阻塞在远程服务器上,实际上是一个监视器。

如果服务器由于某种原因崩溃,该线程会发生什么?

1 个答案:

答案 0 :(得分:1)

答案是:取决于:

  • 这条线可能就在那里;永远等待。
  • 但也有可能在某个时候抛出异常;并且该线程以某种方式返回" alive"。

在这里发挥作用的事情:

  • 底层TCP堆栈
  • 您对它的使用(例如,可以为套接字提供超时值;这会导致在超时情况下抛出异常)
  • 您的客户端的编码方式

换句话说:没有人可以告诉您您的客户端应用程序将要执行的操作。因为我们没有关于您正在处理的实现和配置详细信息的任何信息。

或者,更改观点:应确保您的客户使用某种形式的超时。如上所述,这可以通过在用于通信的sockets上设置超时来完成。或者通过另一个线程来监视与服务器通信的所有线程;并且为了防止这些线程永远等待而在某个时刻开始。

长话短说:如果你认真对待这些问题;你必须做很多研究;一个好的起点将是旧经典"释放它"作者Michael Nygard。