Utilisation de ConcurrentHashMap, quand la synchronisation est-elle nécessaire?

J'ai un ConcurrentHashMap où je ne les suivants:

sequences = new ConcurrentHashMap<Class<?>, AtomicLong>();

if(!sequences.containsKey(table)) {
    synchronized (sequences) {
        if(!sequences.containsKey(table))
            initializeHashMapKeyValue(table);
    }
}

Ma question est: est - il inutile de faire de l'extra

if(!sequences.containsKey(table))

Vérifier à l'intérieur de la synschronized bloc de sorte que les autres threads habitude initialiser la même table de hachage de la valeur?

Peut-être que la vérification est nécessaire et je fais de mal? Il semble un peu idiot ce que je fais, mais je pense que c'est nécessaire.

source d'informationauteur Per Stilling | 2013-02-13