gpt4 book ai didi

java - 使用Java RMI,序列化对象到底什么时候通过网络传输?

转载 作者:行者123 更新时间:2023-11-30 05:16:02 26 4
gpt4 key购买 nike

我正在使用 RMI 来实现一些分布式算法,并且由于我们正在传输相当大的对象,因此我希望了解 RMI 何时通过网络传输序列化对象的一些精度。

假设我有一个具有以下方法的远程类。

class MyServer extends Remote {
public synchronized void foo (Bar bar) {
...
Thread.wait();
...
}
}

现在,我有两个(或更多)RMI 客户端调用 MyServer.foo 方法。当客户端1调用它时,它会在Thread.wait()中被阻塞。然后,客户端 2 调用 foo 并被阻止,因为客户端 1 仍在同步的 foo 方法中。

现在的问题是:客户端 2 调用的 bar 参数何时通过网络传输?只有一次客户端2可以真正进入foo方法或之前,当它被阻止时?

额外问题:这是 RMI 规范强制执行的行为(传输对象的时间)还是特定于实现的行为?

最佳答案

您的示例似乎存在一些问题。

我假设 Thread.wait() 实际上是 this.wait(),因为 Thread 上没有这样的方法。并且应该在用于执行同步的同一对象上调用等待。

假设这样,当客户端1调用lock.wait()时,同步块(synchronized block)上的监视器被释放。这意味着客户端 2 可以访问该方法,并最终会阻塞在同一个等待方法上。当其他线程在同一 MyServer 实例上调用 notification() 时,wait() 将释放。

至于序列化,发生在调用该方法之前。它可能发生在调用此方法的 RMI 代码中。

关于java - 使用Java RMI,序列化对象到底什么时候通过网络传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com