有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

同步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) 个答案

  1. # 1 楼答案

    可以在每个方法中使用具有不同锁定对象的同步块synchronized方法锁定this,因此一次只能访问一个