Java: Как я могу заполнить карту, если я использую вызываемые элементы? - PullRequest
0 голосов
/ 10 февраля 2012

Я хочу использовать Map как форму небольшого "кэша" базы данных в моем приложении.
Я подумал, что было бы лучше использовать что-то вроде:

ConcurrentHashMap<K,Callable<V>>

Так что у меня есть один кеш для многих типов объектов базы данных (а не 1 для каждого вида, то есть `ConcurrentHashMap<K,V>, где V будет некоторым конкретным объектом).

Моя проблема сейчас (при условии, что все вышеперечисленные мысли разумны), как мне предварительно загрузить этот кеш при запуске из БД?

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

Но как мне предварительно загрузить кэш, если я использую вызываемые элементы?

Примечание: я не заинтересован в использовании какой-либо библиотеки, поскольку мои потребности невелики.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2012

Вы, вероятно, должны использовать интерфейсы на ваших объектах:

public interface Cacheable{}

public MyObject implements Cacheable{...}

ConcurrentHashMap<K, Cacheable> = ...
0 голосов
/ 10 февраля 2012

Вам может повезет больше с ConcurrentHashMap<K, Future<V>>, поскольку Future лучше соответствует понятию "что-то в процессе вычисления или, возможно, уже вычисления".Вы можете просто инициализировать некоторые элементы кэша с помощью Future, который уже вычислен.

0 голосов
/ 10 февраля 2012

Не могли бы вы просто сделать что-то простое, как это?

for (Callable<V> c : map.values()) {
    c.call();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...