В Java Компаратор используется в Collections.sort () ориентированный на многопотоковое исполнение?

Если я создаю единственный экземпляр Компаратора, тот экземпляр может использоваться через несколько потоков для сортировки наборов с помощью Collections.sort ()? Или, я должен создать новый экземпляр Компаратора для каждого вызова к Collections.sort () для обеспечения потокобезопасности?

21
задан evan 21 May 2010 в 17:59
поделиться

3 ответа

Это полностью зависит от того, как вы реализуете Компаратор . Если, например, у него есть переменные экземпляра, которые записываются или содержимое которых неявно изменяется во время сравнения, он не будет потокобезопасным.

Большинство реализаций Comparator не делают этого, но один из возможных сценариев может иметь смысл - использовать SimpleDateFormat для сравнения строк, представляющих даты. К сожалению, SimpleDateFormat сам по себе не является потокобезопасным.

24
ответ дан 29 November 2019 в 21:28
поделиться

Компаратор - это интерфейс, ему не присущи свойства параллелизма. Это зависит от того, как вы это напишете, является ли ваша реализация потокобезопасной или нет. Если все, что он делает, ограничено областью действия метода сравнения (без экземпляра или состояния на уровне класса) и все используемые им ресурсы являются потокобезопасными, тогда он сам будет потокобезопасным.

5
ответ дан 29 November 2019 в 21:28
поделиться

Я был бы очень удивлен, если бы нашел компаратор, не поддерживающий потоки, поскольку они обычно (всегда?) Реентерабельны.

Проблема параллелизма может возникнуть, если сортируемая коллекция изменялась во время сортировки.

0
ответ дан 29 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: