Я использую RMI для реализации некоторого распределенного алгоритма, и, поскольку мы передаем довольно большие объекты, я хотел бы получить некоторую точность относительно того, когда RMI передает сериализованные объекты по сети.
Предположим, у меня удаленный класс с использованием следующего метода.
class MyServer extends Remote {
public synchronized void foo (Bar bar) {
...
Thread.wait();
...
}
}
Теперь у меня есть два (или более) клиента RMI, вызывающих метод MyServer.foo.
Когда Клиент 1 вызывает его, он блокируется в Thread.wait () . Затем Клиент 2 вызывает foo , и он блокируется, потому что Клиент 1 все еще использует метод foo , который синхронизирован.
Теперь возникает вопрос: когда по сети передается bar параметр Client 2 call? Только один раз Клиент 2 может реально ввести метод foo или раньше, когда он заблокирован?
Дополнительный вопрос: является ли это (время, в которое объекты передаются) поведением, которое обеспечивается спецификациями RMI, или это зависит от реализации?