2011-09-21 87 views
2

我正在使用Java-RMI编写客户端 - 服务器应用程序。一些服务器端资源必须在互斥模式下访问(我为此使用了锁)。在Java中发生崩溃时释放锁定

现在我不知道什么时候会发生什么:

  1. 客户端调用服务器上的远程方法
  2. 远程方法远程方法之前
  3. 客户端崩溃获取关于临界区的锁离开临界区

将由关联到该客户端的远程方法调用所获取的任何锁被释放?或者之后其他客户不可能获得锁定?

谢谢您的回答

回答

4

什么情况是,远程方法一直执行,直到它完成,并释放锁,当它退出临界区。然后它会尝试将结果(如果有)返回给客户端,并且因为连接已断开而失败。

这里没有特别的危险......

当然,如果服务器使用Lock对象,而不是原始的锁/互斥,那么它需要做的锁释放finally块来处理由于某种意外的异常而失败的情况。但这是一个不同的问题。客户端崩溃将不会触发该情况。

+0

+1:唯一的缺点是服务器不知道早点放弃请求,因为客户端已经消失。另一种看待它的方式是服务器的行为完全一样。 –