Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Vector, Hashtable. В чем минус синхронизированности?

Vector, HashTable, Stack являются устаревшими коллекциями, и пишут что их не используют в виду синхронизированности их методов. В чем минус синхронизации? Если однопоточная среда, это как-то влияет на их работу? Потокобезопасность это же хорошо. Если они устаревшие, зачем создавали синхронизированные коллекции в concurrent пакете? Извините за тупой вопрос, очень интересно просто. Заранее спасибо.


Ответ

Потокобезопасность это же хорошо.
Потокобезопасность не бесплатна, точнее очень не бесплатна, именно поэтому есть потокобезопасные и не потокобезопасные коллекции.
Если однопоточная среда, это как-то влияет на их работу?
Такие коллекции работают значительно медленее, чем не синхронизированные аналоги
Если они устаревшие, зачем создавали синхронизированные коллекции в concurrent пакете?
Новые синхронизированные коллекции используют более быстрый алгоритм, когда блокируется не вся коллекция целиком при каждом чихе, а только часть (блок), поэтому Vector, HashTable, Stack не стоит использовать ни в многопоточности (они работают медленнее, чем новые коллекции), ни в однопоточном - они просто избыточны.
Если интересно более подробно разобраться с коллекциями советую посмотреть мою статью
P.S. В принципе, если вам производительность не важна, то ничего страшного не случится если вы будите использовать Vector, HashTable и т.п. вместо ArrayList, HashMap и т.д., они будут работать нормально. Но их использование считается плохим кодом и признаком плохого знания языка.

Комментариев нет:

Отправить комментарий