Se le pile si estendono vettore significa che gli stack sono sincronizzati?Lo stack si estende Vector
nota da documenti Vector Java
A differenza delle nuove implementazioni di raccolta, vettore è sincronizzato.
Se le pile si estendono vettore significa che gli stack sono sincronizzati?Lo stack si estende Vector
nota da documenti Vector Java
A differenza delle nuove implementazioni di raccolta, vettore è sincronizzato.
Sì, è sincronizzato, ma secondo il Javadocs si dovrebbe preferire un Deque
invece di un Stack
.
Dal Stack
Javadocs:
Una serie più completa e coerente di operazioni di stack LIFO è fornito dall'interfaccia Deque e sue implementazioni, che dovrebbe essere usato di preferenza per questa classe. Per esempio:
Deque<Integer> stack = new ArrayDeque<Integer>();
Sì, metodi ereditati dal vettore rimangono sincronizzati in modalità Stack. I metodi Own Stack peek, pop, search sono sincronizzati in Stack. metodi Stack.push e Stack.empty non sono sincronizzati, ma
public boolean empty() {
return size() == 0;
}
public E push(E item) {
addElement(item);
return item;
}
entrambi i metodi stanno chiamando sincronizzati metodi di Vector quindi Stack.empty e Stack.push sono thread-safe.
+1. Penso che sia corretto. Non penso che l'estensione del vettore si renda sincronizzato allo stack. È come sono definiti i metodi. – kosa
Esatto, non è possibile sincronizzare una classe ma i suoi metodi –
e in caso di dubbio [guardare nel codice] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Stack.java) (* openjdk only;)) – soulcheck
perché non utilizzare LinkedList? ArrayDeque è un'implementazione di Deque, ma Vector è un'implementazione di List –