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 .