Поточно-ориентированная итерация по collection

Все мы знаем, что при использовании Collections.synchronizedXXX (например, synchronizedSet () ) мы получаем синхронизированное "представление" базовая коллекция.

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

Какой вариант вы выбираете для решите эту проблему?

Я вижу только следующие подходы:

  1. Делайте это, как указано в документации: синхронизировать в коллекции
  2. Клонировать коллекцию перед вызовом iterator ()
  3. Использовать коллекцию, итератор которой является потокобезопасным (мне известно только о CopyOnWriteArrayList / Set)

И в качестве бонусного вопроса: при использовании синхронизированного представления - является ли использование foreach / Iterable потокобезопасным?

19
задан Dave Hartnoll 19 September 2014 в 15:21
поделиться