2012-03-22 14 views
16

Los Java 1.4 doc para javax.xml.parsers.DocumentBuilderFactory estados en términos muy claros:¿DocumentBuilderFactory es seguro para subprocesos en Java 5+?

Una implementación de la clase DocumentBuilderFactory no se garantiza que la ejecución de subprocesos. Depende de la aplicación del usuario asegurarse de utilizar DocumentBuilderFactory a partir de más de un hilo. Alternativamente, la aplicación puede tener una instancia de DocumentBuilderFactory por hilo. Una aplicación puede usar la misma instancia de la fábrica para obtener una o más instancias del DocumentBuilder, siempre que la instancia de la fábrica no se use en más de un hilo a la vez.

Los documentos Java 5 y Java 6, sin embargo, no dicen nada de eso. ¿Está DocumentBuilderFactory seguro para subprocesos ahora, o simplemente Sun decidió que la advertencia era excesiva y la gente debería saberlo mejor?

+0

posible duplicado de [Is DocumentBuilder.parse() thread safe?] (Http://stackoverflow.com/questions/56737/is-documentbuilder-parse-thread-safe) –

+5

No es un duplicado, la pregunta es si es seguro para múltiples hilos * para construir * DocumentBuilders usando la misma fábrica, no si es seguro tratar de analizar múltiples documentos con el mismo constructor. –

Respuesta

-5

Ya que hubiera sido de muy mal gusto hacerlo seguro sin decir mi dinero es que todavía no es seguro. Puede probar esto usted mismo usando puntos de interrupción.

13

Una implementación de la clase DocumentBuilderFactory NO garantiza que sea segura para la ejecución de subprocesos. Depende de la aplicación del usuario asegurarse de utilizar DocumentBuilderFactory a partir de más de un hilo. Alternativamente, la aplicación puede tener una instancia de DocumentBuilderFactory por hilo. Una aplicación puede usar la misma instancia de la fábrica para obtener una o más instancias del DocumentBuilder, siempre que la instancia de la fábrica no se use en más de un hilo a la vez.

Hay un método de reinicio() en DocumentBuilder que lo restaura al estado cuando se creó por primera vez. Si vas a la ruta ThreadLocal, no te olvides de llamar a esto o te rocían con una manguera.

Cuestiones relacionadas