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 .