sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Debo usar Java String Pool para la sincronización basada en una identificación de cliente única?

Bueno, si sus cadenas son lo suficientemente únicas (por ejemplo, generadas a través de un hash criptográfico), la sincronización en las ID de los clientes probablemente funcionará , siempre que llame a String.intern() en ellos primero. Dado que las ID son únicas, no es probable que tenga conflictos con otros módulos, a menos que les pase sus ID y siguen la mala práctica de encerrarlos.

Dicho esto, probablemente sea una mala idea. Además de la pequeña posibilidad de que un día se encuentre con una contención innecesaria si alguien más se bloquea en la misma String ejemplo, el principal problema es que tienes que intern() todas tus String objetos, y esto a menudo sufre de un bajo rendimiento debido a la implementación nativa de la tabla interna de cadenas, su tamaño fijo, etc. Si realmente necesita bloquear basado solo en una String , es mejor que uses el Interners.newWeakInterner() implementación interna, que es probable que funcione mucho mejor. Envuelva su cadena en otra clase para evitar conflictos en el String incorporado cerrar. Más detalles sobre ese enfoque en esta respuesta .

Además de eso, a menudo hay otro objeto natural para bloquear, como un bloqueo en un objeto de sesión, etc.

Esto es bastante similar a esta pregunta que tiene respuestas más desarrolladas.

... o, como mínimo, tener suficientes bits para hacer que la colisión sea lo suficientemente improbable y si sus ID de cliente no forman parte de su superficie de ataque .