Страницы

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

воскресенье, 15 декабря 2019 г.

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

#java #коллекции #concurrency


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


Ответы

Ответ 1



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

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

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