MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Dois-je utiliser Java String Pool pour la synchronisation basée sur un identifiant client unique ?

Eh bien, si vos chaînes sont suffisamment uniques (par exemple, générées via un hachage cryptographique), la synchronisation sur les ID client va probablement fonctionner , tant que vous appelez String.intern() sur eux d'abord. Étant donné que les identifiants sont uniques, vous ne risquez pas d'entrer en conflit avec d'autres modules, à moins que vous ne leur transmettiez vos identifiants et ils suivent la mauvaise pratique de les verrouiller.

Cela dit, c'est probablement une mauvaise idée. En plus de la petite chance de rencontrer un jour un conflit inutile si quelqu'un d'autre verrouille la même String exemple, le principal problème est que vous devez intern() toutes vos String objets, et cela souffre souvent de mauvaises performances en raison de l'implémentation native de la table interne de chaînes, de sa taille fixe, etc. Si vous avez vraiment besoin de verrouiller uniquement sur une String , vous feriez mieux d'utiliser Interners.newWeakInterner() implémentation interne, qui est susceptible de fonctionner beaucoup mieux. Enveloppez votre chaîne dans une autre classe pour éviter les conflits sur la String intégrée bloquer. Plus de détails sur cette approche dans cette réponse .

En plus de cela, il y a souvent un autre objet naturel à verrouiller, comme un verrou dans un objet de session, etc.

Ceci est assez similaire à cette question qui a des réponses plus étoffées.

... ou, au minimum, avoir au moins suffisamment de bits pour rendre la collision suffisamment improbable et si vos identifiants client ne font pas partie de votre surface d'attaque .