【发布时间】:2011-07-26 12:05:33
【问题描述】:
我刚刚开始使用 java rmi 进行编程,但在我的代码中遇到了以下问题:
我的服务器有两个 Remote 方法,一般实现如下:
public class ServerImpl extends UnicastRemoteObject implements Server{
....
Synchronized void foo(){ aClient.Foo3();}
Synchronized void foo1(){ .... }
}
我的客户有一个远程方法,实现如下:
public class ClientImpl extends UnicastRemoteObject implements Client{
....
void Foo3(){theServer.foo1();}
}
所以当 aClient 调用服务器的 foo() 时,服务器调用客户端的 Foo3() 然后 aClient 想调用服务器的 foo1() 并且我们遇到了死锁(服务器和客户端都没有继续前进)。我知道这是由于 Synchronized 关键字引起的。问题是这些方法必须同步(我不希望两个线程同时在那里),而且我对如何解决这个问题一无所知。任何帮助表示赞赏。
非常感谢!
【问题讨论】:
标签: java synchronization rmi deadlock