#java #concurrency #synchronization #apache-commons
#java #параллелизм #синхронизация #apache-commons
Вопрос:
Почему существует синхронизированный набор Apache, когда у нас есть синхронизированный набор коллекции?
Это лучше в любом случае?
Комментарии:
1. Хорошо, чем сказать: можете ли вы сделать что-то с версией Apache, чего вы не можете сделать с другой?
Ответ №1:
Это зависит от того, что вы хотите сделать. Синхронизированный набор Apache позволяет получить базовый набор. Вероятно, это обеспечивает согласованность. Метод сбора данных является стандартным.
Вы могли бы рассмотреть возможность использования одного из параллельных наборов, таких как Collections.setFromMap(new ConcurrentHashMap())
, CopyOnWriteArraySet
или ConcurrentSkipListSet
Комментарии:
1. Я не думаю, что вы можете получить доступ к базовому набору. Смотрите commons.apache.org/collections/apidocs/org/apache/commons /… : Возвращает оформленный набор.
2. @pihentagy, для меня это означает то же самое. Вот исходный код java2s.com/Open-Source/Java-Document/Library /…
3. Лварей: запутался. В документах говорится, что вы получаете оформленный набор, но в коде говорится, что вы получаете не оформленный. Тогда в документах есть опечатка?
4. Я бы прочитал это как значение; набор, который был оформлен , а не набор, который его украшает .
Ответ №2:
Я предполагаю, потому что это позволяет вам указать пользовательский объект блокировки.
Конструктор защищен, но вы можете создать его подкласс и передать пользовательскую блокировку.
Комментарии:
1. Что ж, хорошая мысль, но когда вам нужен пользовательский объект блокировки, вам потребуется внешняя синхронизация.