Стек расширяет вектор
Если стеки расширяют вектор, это означает, что стеки синхронизированы?
Примечание от векторных документов Java
В отличие от новых реализаций коллекции синхронизируется вектор.
Ответы
Ответ 1
Да, он синхронизирован, но в соответствии с Javadocs вам следует предпочесть Deque
вместо Stack
.
Из Stack
Javadocs:
Более полный и последовательный набор операций стека LIFO предоставляемые интерфейсом Deque и его реализациями, которые должны используется для этого класса. Например:
Deque<Integer> stack = new ArrayDeque<Integer>();
Ответ 2
Да, методы, унаследованные от Vector, остаются синхронизированными в Stack. Собственные методы стека заглядывают, поп, поиск синхронизируются в стеке. Методы Stack.push и Stack.empty не синхронизированы, но
public boolean empty() {
return size() == 0;
}
public E push(E item) {
addElement(item);
return item;
}
оба метода вызывают векторные синхронизированные методы, поэтому Stack.empty и Stack.push являются потокобезопасными.