释放Java中的崩溃锁

时间:2011-09-21 15:01:52

标签: java concurrency rmi

我正在使用Java-RMI编写客户端 - 服务器应用程序。必须以互斥方式访问某些服务器端资源(我为此目的使用锁)。

现在我想知道在以下情况会发生什么:

  1. 客户端在服务器上调用远程方法
  2. 远程方法获取关键部分的锁定
  3. 客户端在远程方法退出关键部分之前崩溃
  4. 是否会释放与该客户端关联的远程方法调用获取的任何锁定?或者其他客户之后是否无法获得锁定?

    感谢您的回答

1 个答案:

答案 0 :(得分:4)

远程方法在完成之前一直执行,并在退出临界区时释放锁。然后它尝试将结果(如果有的话)返回给客户端,并因连接断开而失败。

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

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