уведомить поток в клиенте, который был отправлен на wait () на сервере - PullRequest
1 голос
/ 17 января 2012

Мне нужно решить большую проблему, и я не знаю, как ее решить.На сервере потоков я вызываю объект методом wait(), после использования ObjectOutputStream отправляю объект клиентскому потоку, который подключен к серверу.Когда объект прибывает на другую сторону, я вызываю для объекта метод notify(), но объект не выходит из состояния ожидания.Это вызвано тем, что отправленный объект не совпадает.Как я могу решить эту большую проблему?

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Независимо от того, находятся ли клиент и сервер на двух разных машинах / JVM, объект, который вы получаете после сериализации - десериализация отличается от исходного объекта. Когда вы вызываете «wait ()» для одного объекта, поток блокируется, пока какой-то другой поток не вызовет notify () для этого ЖЕ объекта. У вас здесь два разных объекта, и поэтому механизм ожидания-уведомления не будет работать. Вы должны отправить некоторое подтверждение на сервер, используя сетевое соединение (могут быть сокеты).

3 голосов
/ 17 января 2012

Если я правильно вас понимаю, вы сериализуете объект на сервере, отправляете его клиенту, вызываете notify() на клиенте и ожидаете, что это повлияет на сервер.Это не будет работать, потому что они находятся на разных компьютерах или, по крайней мере, на разных JVM.Единственный способ отправить сообщение обратно на сервер - через сокет.

1 голос
/ 17 января 2012

Предлагаю прочитать документацию о синхронизации .

...