同步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想要调用服务器的foo1(),我们就出现了死锁(服务器和客户端都没有继续)。我知道这是因为Synchronized关键字造成的。问题是这些方法必须同步(我不希望两个线程同时出现在其中),我对如何解决这个问题一点也不知道。感谢您的帮助
非常感谢
# 1 楼答案
可以在每个方法中使用具有不同锁定对象的同步块
synchronized
方法锁定this
,因此一次只能访问一个