как работает Vector java
Всем привет) интересно узнать, почему класс Vector в java потокобезопасен. Документация делает акцент на том что он динамичный, но все же это не совсем то, что нужно. Заглянув в исходники, заметила, что некоторые методы помечены synchronized, значит ли это что только один поток имеет доступ к содержимому коллекции?
Ответы (2 шт):
Автор решения: Ivan Tropin
→ Ссылка
Да, Vector потокобезопасен именно потому, что у него все методы synchronized. Для многопоточки лучше юзать СopyOnWriteArrayList.
Автор решения: pazukdev
→ Ссылка
- Да, только 1 поток имеет доступ единовременно. Методы имеют блоки синхронизированные по this, т.е. блокируется целиком вся коллекция.
- Vector - это старый аналог ArrayList'а. Оба экстендят AbstractList. Vector отличается упомянутой синхронизированностью и размером увеличения внутреннего массива (в ArrayList он увеличивается в 1,5 раза, в Vector в 2 раза). Также стоит упомянуть, что Stack экстендит именно Vector.
- В целом у нас нет причин когда-либо использовать Vector.