Быстрый фон У меня есть параллельная карта, которую я использовал для кэширования некоторых значений, которые меняются довольно часто (все же стоит их кэшировать в ходе тестирования). Я хочу регулярно выгружать элементы из своего кэша, проверяя время истечения в значении. Я использую метод keySet () для получения ссылки на все мои ключи, а затем проверяю значения и, если срок их действия истек, я их удаляю. В других потоках кэш постоянно запрашивается и обновляется (удаляется).
В javadocs для keySet () было упомянуто, если карта меняется, когда я перебираю набор ключей. Установить результаты не определены. Очевидно, я хотел бы иметь определенный способ борьбы с этим, чтобы результаты были действительными. Было бы достаточно передать набор в HashSet, а затем выполнить итерацию по этому набору, поскольку, насколько я понимаю, этот набор не будет поддерживаться картой, является ли это расточительным способом памяти? Любые идеи приветствуются.
К сожалению, мой evictor - не единственный способ удаления элементов из параллельной карты, поэтому я прав, говоря, что мне нужно скопировать набор ключей в другой набор перед его повторением.
Заранее спасибо
РЕДАКТИРОВАТЬ: Оказывается, я читал Javadocs для метода Map keySet () вместо ConcurrentMap keySet (). Спасибо, мой плохой:)
Возвращает установленный вид клавиш
содержится в этой карте. Набор
опираясь на карту, поэтому изменения в
карта отражается в наборе, и
наоборот. Если карта изменена
в то время как итерация по множеству находится в
прогресс (кроме как через
собственная операция удаления итератора),
Результаты итерации
не определено. Набор поддерживает элемент
удаление, которое удаляет
соответствующее отображение с карты,
через Iterator.remove, Set.remove,
удалить все сохранить все и очистить
операции. Это не поддерживает
операции добавления или добавления всех.