【问题标题】:Java RMI SynchronizationJava RMI 同步
【发布时间】:2012-11-28 09:19:58
【问题描述】:

我了解以下代码的各个部分缺失,我的问题是关于 RemoteImplemntation 中的同步机制。我也了解这个网站和其他关于 RMI 和同步的问题;在这里,我正在寻找明确的确认/矛盾。

我的问题是:当我有多个客户端同时运行时,这是一种同步调用 add 方法的合理方法吗?即,假设所有的 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);
        }
    }
}

【问题讨论】:

    标签: java synchronization rmi


    【解决方案1】:

    synchronized 关键字将使显示的服务器代码以线程安全的方式执行,因此ids 将包含 20000 个项目(除非输入中有重复项,尽管这不太可能)。

    【讨论】:

      【解决方案2】:

      这会奏效。不需要锁对象,直接在ids同步即可。

      【讨论】:

        猜你喜欢
        • 2011-01-17
        • 1970-01-01
        • 2018-10-31
        • 2011-06-26
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多