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