我刚开始使用Java RMI编程,我在我的代码面临以下问题:Java RMI的僵局
我的服务器有其一般实现了两个远程方法如下:
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要调用SERV呃的foo1()和我们有一个死锁(服务器和客户端都没有移动)。我知道这是由于Synchronized关键字引起的。问题是这些方法必须是Synchronized的(我不希望两个线程同时在那里),并且我没有丝毫的想法来解决这个问题。任何帮助赞赏。
非常感谢!