Je lis pour la concurence depuis hier et je ne sais pas beaucoup de choses ... Cependant, certaines choses commencent à se clarifier ...
Je comprends pourquoi le double contrôle de verrouillage n'est pas sûr (je me demande quelle est la propabilité la condition rare de se produire), mais fixe volatils la question 1.5 + ....
mais je me demande si cela se produit avec putifAbsent
Pourquoi ConcurrentHashMap.putifAbsent est sécuritaire?
comme ...
myObj = new myObject("CodeMonkey");
cHashM.putIfAbsent("keyy",myObj);
Alors est-ce qui garantit que myObj
serait 100% intialiased quand un autre thread fait un cHashM.get()
??? Parce qu'il pourrait avoir une référence isnt complètement initialisés (le double problème de verrouillage à cocher)
Donc, si je comprends bien, il n'y a pas de problème, comme dans le paradigme classique du double contrôle? – GorillaApe
@Parhs: Droit, il n'y a pas de problème. – ColinD
Vous avez raison. Vous avez effectivement répondu vous-même dans votre question avec 'mais volatile corrige le problème en 1.5 + 'Comme la valeur retournée par le CCHM est une valeur volatile, elle est aussi sûre de l'initialisation partielle. –