如何发生RMI死锁?

时间:2011-12-15 12:41:14

标签: java rmi deadlock

假设分布式应用程序中的进程正在使用RMI进行交互 彼此。死锁怎么会发生?如何避免呢?

2 个答案:

答案 0 :(得分:2)

如果你使用回调,你可以在没有RMI的情况下在没有死锁的系统中通过RMI获得死锁。在调用线程上执行本地回调;但是,在与原始客户端调用线程不同的线程上执行RMI回调。因此,如果存在客户端同步,则可能发生死锁,如果调用都是本地的,则不会发生死锁。

答案 1 :(得分:0)

在本地JVM的情况下,JVM可以告知调用对象“ A”拥有该锁,并将允许对“ A”的调用继续进行。在分布式情况下,无法进行这种确定,因此结果是死锁。分布式对象的行为与本地对象不同。如果您只是简单地重用本地实现而不处理锁定和故障,则可能会得到不可预测的结果。由于对同一个远程对象的远程方法调用可以同时执行,因此远程对象实现需要确保其实现是线程安全的。例如,当一个客户端登录服务器以维护安全性并避免死锁时,将不允许同一客户从另一台计算机登录到服务器。这是通过创建会话标志来完成的。