2012-11-27 97 views
0

我知道下面的代碼的各個位都丟失了,我的問題是關於RemoteImplemntation中的同步機制。我也明白在這個站點和其他有關RMI和同步的問題上有幾個問題。我在這裏尋找明確的確認/矛盾。Java RMI同步

我的問題是:當我有幾個客戶端在同一時間運行,這是一個合理的方式來同步調用添加方法?也就是說,假設所有ID都不相同,20個客戶端在不同的機器上執行完成後,樹集的大小是否將爲20,000?

public interface RemoteInterface extends Remote { 
    void add(String id) throws RemoteException; 
} 

public class RemoteImplemenation implements RemoteInterface{  
    TreeSet<String> ids = new TreeSet<String>(); 
    final Object lock = new Object(); 
    public void add(String id) { 
     synchronized(lock) { 
      ids.add(id); 
     } 
    } 
} 

public class Client { 
    public static void main(String[] args) { 
     RemoteInterface remote = (RemoteInterface)Naming.lookup(...); 
     for (int i=0;i<1000;i++) { 
      remote.add(ipaddress+"_"+i); 
     } 
    } 
} 

回答

1

​​關鍵字將顯示服務器代碼線程安全的方式執行,所以ids將包含20000項(除非有輸入重複的,雖然這是不可能的)。

1

這將工作。您並不需要鎖定對象,您可以直接在ids上同步。