Hvis dine strenge er unikke nok (f.eks. genereret via en kryptografisk hash), vil synkronisering på klient-id'er sandsynligvis fungere , så længe du kalder String.intern()
på dem først. Da ID'erne er unikke, vil du sandsynligvis ikke løbe ind i konflikter med andre moduler, medmindre du tilfældigvis sender dine ID'er til dem og de følger den dårlige praksis med at låse på dem.
Når det er sagt, er det nok en dårlig idé. Ud over den lille chance for en dag at løbe ind i unødvendig strid, hvis en anden låser på den samme String
for eksempel er hovedproblemet, at du skal intern()
hele din String
objekter, og dette lider ofte af dårlig ydeevne på grund af den native implementering af strengintern-tabellen, dens faste størrelse osv. Hvis du virkelig har brug for at låse kun baseret på en String
, er du bedre stillet ved at bruge Guavas Interners.newWeakInterner()
intern implementering, som sandsynligvis vil fungere meget bedre. Pak din streng ind i en anden klasse for at undgå at støde på den indbyggede String
låse. Flere detaljer om denne tilgang i dette svar
.
Udover det er der ofte et andet naturligt objekt at låse på, såsom en lås i et sessionsobjekt osv.
Dette minder meget om dette spørgsmål som har mere konkrete svar.
... eller i det mindste have nok bits til at gøre kollision usandsynlig nok, og hvis dine klient-id'er ikke er en del af din angrebsflade .