Java中崩溃时的并发释放锁
我正在使用JavaRMI编写一个客户机-服务器应用程序。某些服务器端资源必须以互斥方式访问(我正为此使用锁)
现在我想知道当:
- 客户端调用服务器上的远程方法
- 远程方法获取关键部分的锁
- 客户端在远程方法退出临界区之前崩溃
是否释放与该客户端关联的远程方法调用获取的任何锁?或者其他客户机不可能在以后获得锁
谢谢你的回答
你可以在下面搜索框中键入要查询的问题!
我正在使用JavaRMI编写一个客户机-服务器应用程序。某些服务器端资源必须以互斥方式访问(我正为此使用锁)
现在我想知道当:
是否释放与该客户端关联的远程方法调用获取的任何锁?或者其他客户机不可能在以后获得锁
谢谢你的回答
# 1 楼答案
发生的情况是,远程方法一直执行到完成为止,并在退出关键部分时释放锁。然后它尝试将结果(如果有)返回给客户端,但由于连接已断开而失败
这里没有特别的危险
当然,如果服务器使用的是
Lock
对象而不是原始锁/互斥锁,那么它需要在finally块中释放锁,以处理由于某些意外异常而失败的情况。但这是另一个问题。客户端崩溃不会触发这种情况