MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Devo usar o Java String Pool para sincronização com base no ID exclusivo do cliente?


Bem, se suas strings forem únicas o suficiente (por exemplo, geradas por meio de um hash criptográfico), a sincronização em IDs de cliente provavelmente funcionará , contanto que você chame String.intern() neles primeiro. Como os IDs são exclusivos, você provavelmente não terá conflitos com outros módulos, a menos que passe seus IDs para eles e eles seguem a má prática de bloqueá-los.

Dito isto, é provavelmente uma má ideia. Além da pequena chance de um dia se deparar com uma contenção desnecessária se outra pessoa bloquear a mesma String instância, o principal problema é que você tem que intern() todas as suas String objetos, e isso geralmente sofre de baixo desempenho por causa da implementação nativa da tabela interna de strings, seu tamanho fixo, etc. Se você realmente precisa bloquear com base apenas em uma String , é melhor usar o Interners.newWeakInterner() implementação interna, que provavelmente terá um desempenho muito melhor. Envolva sua string em outra classe para evitar conflitos na String interna trancar. Mais detalhes sobre essa abordagem nesta resposta .

Além disso, geralmente há outro objeto natural para travar, como um travamento em um objeto de sessão, etc.

Isso é bastante semelhante a esta pergunta que tem respostas mais detalhadas.

... ou, no mínimo, ter pelo menos bits suficientes para tornar a colisão improvável o suficiente e se seus IDs de cliente não fizerem parte de seu superfície de ataque .