Е, ако вашите низове са достатъчно уникални (напр. генерирани чрез криптографски хеш), синхронизирането на клиентски идентификатори вероятно ще работи , стига да извикате String.intern()
първо върху тях. Тъй като идентификационните номера са уникални, няма вероятност да попаднете в конфликти с други модули, освен ако случайно не предадете своите идентификационни номера към тях и те следват лошата практика да ги блокират.
Въпреки това вероятно е лоша идея. В допълнение към малкия шанс един ден да попаднете в ненужно съперничество, ако някой друг заключи същия String
например, основният проблем е, че трябва да intern()
целият ви String
обекти и това често страда от лоша производителност поради естественото внедряване на таблицата с низове, фиксираният й размер и т.н. Ако наистина трябва да заключите само на базата на String
, по-добре е да използвате Interners.newWeakInterner()
вътрешна реализация, която е вероятно да работи много по-добре. Обвийте своя низ в друг клас, за да избегнете сблъсък с вградения String
ключалка. Повече подробности за този подход в този отговор
.
Освен това често има друг естествен обект за заключване, като например заключване в обект на сесия и т.н.
Това е доста подобно на този въпрос който има по-подробни отговори.
... или поне да имате достатъчно битове, за да направите сблъсъка малко вероятен и ако вашите клиентски идентификатори не са част от вашия повърхност за атака .