Welnu, als uw strings uniek genoeg zijn (bijvoorbeeld gegenereerd via een cryptografische hash), zal synchronisatie op client-ID's waarschijnlijk werken , zolang je maar String.intern()
. aanroept eerst op hen. Aangezien de ID's uniek zijn, is het niet waarschijnlijk dat u in conflict komt met andere modules, tenzij u uw ID's aan hen doorgeeft en ze volgen de slechte gewoonte om ze op te sluiten.
Dat gezegd hebbende, is het waarschijnlijk een slecht idee. Naast de kleine kans dat je op een dag onnodige ruzie krijgt als iemand anders dezelfde String
gebruikt het grootste probleem is bijvoorbeeld dat je moet intern()
al je String
objecten, en dit lijdt vaak onder slechte prestaties vanwege de native implementatie van de string intern-tabel, de vaste grootte, enz. Als u echt alleen op basis van een String
moet vergrendelen , kunt u beter Guava's Interners.newWeakInterner()
interne implementatie, die waarschijnlijk veel beter zal presteren. Wikkel je string in een andere klasse om te voorkomen dat deze botst met de ingebouwde String
op slot doen. Meer details over die aanpak in dit antwoord
.
Daarnaast is er vaak een ander natuurlijk object om op te vergrendelen, zoals een slot in een sessie-object, enz.
Dit lijkt veel op deze vraag die meer uitgewerkte antwoorden heeft.
... of op zijn minst voldoende bits hebben om een botsing onwaarschijnlijk genoeg te maken en als uw client-ID's geen deel uitmaken van uw aanvalsoppervlak .