2012-07-08 8 views
2

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

Мое местное хранилище значений предназначено для хранения объектов, которые в настоящее время используются. Если объект не используется, он удаляется из хранилища.

Значение передается в мой магазин через thread1, его запись в магазин объявляется слушателям, и значение сохраняется. Значения, входящие в thread1, будут либо полностью новыми значениями, либо обновлениями для существующих значений.

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

Теперь активный элемент в thread2 может проснуться и попытаться получить доступ к набору значений, передав набор идентификаторов значений, о которых он знает. Некоторые значения будут сохранены уже (отлично), а некоторые могут (грустно). Те значения, которые еще не сохранены, будут извлекаться из внешнего источника.

Моя основная проблема заключается в том, что элементы, которые еще не были сохранены и в настоящее время запрашиваются, могут поступать в thread1 до завершения запроса.

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

+2

IMO Ваше описание является слишком общим для ответа, как есть. Какова ваша стратегия безопасности потоков? выполняете ли вы запросы в thread1 или другом рабочем потоке? Зачем вам нужно блокировать доступ к хранилищу во время запроса? и т. д. Пример упрощенного кода поможет мне подумать. – assylias

ответ

3

Кажется, что вы ищете какой-то кеш. Вы пытались исследовать существующую реализацию кеша, может быть, некоторые из них будут делать?

Например, реализация кэша Guava, по-видимому, покрывает многие ваши требования - http://code.google.com/p/guava-libraries/wiki/CachesExplained.

+0

Спасибо Arnost, кеш был именно тем, что мне нужно. – Telax

Смежные вопросы