我剛開始使用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的(我不希望兩個線程同時在那裏),並且我沒有絲毫的想法來解決這個問題。任何幫助讚賞。
非常感謝!