Sincronia de Collections

2 respostas
saoj

Se só estou usando get e put de uma HashMap, que são chamados por threads diferentes, preciso sincronizar ???

A documentação não é muito clara sobre isso…

(Acredito que sim…)

2 Respostas

urubatan

o ideal para prevenir resultados extranhos é sincronizar sim,
o melhor é sincronizar só na instancia no momento destes acessos, não ha necessidade de utilizar uma coleção sincronizada se forem poucos pontos onde ela é utilizada por mais de uma thread :smiley:

saoj

É. Olhando o código fonte do hashmap parece que é bem inseguro não sincronizar…

public V get(Object key) {
        Object k = maskNull(key);
        int hash = hash(k);
        int i = indexFor(hash, table.length);
        Entry<K,V> e = table[i]; 
        while (true) {
            if (e == null)
                return null;
            if (e.hash == hash && eq(k, e.key)) 
                return e.value;
            e = e.next;
        }
    }
Criado 18 de abril de 2006
Ultima resposta 18 de abr. de 2006
Respostas 2
Participantes 2