Многопоточность Проблема в Java: Как очистить последний элемент в списке, когда метод обновления больше не вызывается? - PullRequest
0 голосов
/ 22 июня 2010

У меня есть проблема в проекте, над которым я работаю:

У меня есть список элементов, отправленных через сервер, у меня есть локальная копия этого списка каждый раз, когда сервер вызывает метод обновления моего клиента.

Сам метод обновления проверяет, идентичен ли вновь отправленный список локальной копии, если нет, изменяет локальную копию. Это означает, что если на сервере элемент больше не присутствует, его следует удалить из локальной копии.

Проблема возникает, когда на сервере исчезает последний элемент: после этого сервер перестает вызывать метод обновления. Это означает, что локальная копия остается с одним элементом до тех пор, пока метод обновления не будет вызван снова, поскольку он вызывается только тогда, когда на сервере есть данные для отправки.

Теперь я не могу изменить архитектуру сервера или тот факт, что он не вызывает метод, когда список пуст. Я могу изменить только сторону клиента.

Я экспериментировал с потоками на моем клиенте, чтобы иметь какой-то поток, работающий параллельно, чтобы очистить список, если список не обновлялся какое-то время. Это не работает правильно или эффективно, и я, кажется, получаю случайные результаты, которые могут полностью измениться, просто изменив частоту выполнения потока.

Моя основная проблема возникает из-за того, что я не могу найти эффективный способ определить, активно я получаю данные или нет. Я также не могу найти способ проверить, заблокирован ли поток в данный момент или нет.

Любые идеи о том, как я могу подойти к этой проблеме? Я не очень хорошо разбираюсь в многопоточности и уже некоторое время бьюсь головой об стену.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Просмотр некоторого кода поможет дать более конкретный ответ, но если применяемый вами подход работает на концептуальном уровне, вы можете взглянуть на Java Timer класс и создать TimerTask, который вызываетметод, который проверяет, когда список последний раз обновлялся, и очищает его при необходимости.

0 голосов
/ 22 июня 2010

В этом случае используйте AtomicReference. Преимущество этого можно найти по этой ссылке http://www.ibm.com/developerworks/java/library/j-jtp11234/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...