2011-08-27 19 views
23

Me hago esta pregunta debido siguientes observaciones¿es seguro el subproceso java.util? USID?

  1. conseguir este seguimiento de la pila en el vertedero de hilo en altamente múltiples entorno de roscado

    "http-80-200" daemon prio=10 tid=0x00002aaab4981000 nid=0x7520 waiting \ 
    for monitor entry [0x000000004fec7000] 
        java.lang.Thread.State: BLOCKED (on object monitor) 
        at java.security.SecureRandom.nextBytes(SecureRandom.java:433) 
        - waiting to lock <0x00000000c00da220> (a java.security.SecureRandom) 
        at java.util.UUID.randomUUID(UUID.java:162) 
    
  2. encontrado este enlace

    http://bugs.sun.com/view_bug.do?bug_id=6611830

si UUID no es seguro para subprocesos, sugiera cualquier otra biblioteca, si existe.

+2

El hecho de que un hilo está en el estado 'BLOCKED' hace, en sí mismo, no significa que hay un problema. Esto es normal si un hilo está esperando obtener un bloqueo para un método sincronizado o bloque de código. Solo si el hilo permanece en este estado para siempre podría significar que hay un punto muerto. – Jesper

+0

+ 1 para el enlace (informe de error de Josh Bloch ...) - y, por cierto, según lo vinculado en el informe de errores (http://cr.openjdk.java.net/~mduigou/6611830/webrev.0/webrev /) el error debería ser arreglado por ahora –

Respuesta

10

UUID es inmutable, por lo que es potencialmente seguro para subprocesos, pero aparentemente hubo algunos evil caching going on en algunos accesores que lo hicieron inseguro (ese error está solucionado ahora).

Pero el volcado de hilo sólo dice que un hilo está esperando un bloqueo en SecureRandom.nextBytes, que es utilizado por la fábrica UUID.randomUUID, lo que sin duda es flujos seguros. Es lo que se supone que sucederá cuando varios hilos lo llamen simultáneamente, por lo que yo sé.

+0

El uso de SecureRandom hará que este método sea muy lento en algunas circunstancias. Es bueno usar esta fuente de bits si realmente quieres los mejores bits, pero si quieres muchos UUID (para una simulación tal vez), esto podría ser desastrosamente lento. –

+0

Como el error se solucionó hace años, ¿debería esta respuesta decir que ahora es segura para subprocesos? – eis

-1

Es hilo seguro --- es por eso que pasé semanas para localizar el cuello de botella resultante de esta clase mal en un programa concurrente.

+0

¿Alguna solución alternativa que se te ocurra en este cuello de botella? – Ashish

+7

¿Estás diciendo que ES o NO es seguro para subprocesos? El sarcasmo no es realmente útil aquí. – jtbradle

+1

Responda claramente si realmente lo encontró seguro para subprocesos o no. De su respuesta sacrcástica, el lector de su respuesta no está seguro de nada. –

Cuestiones relacionadas