2012-03-22 10 views
16

I Java 1.4 doc per javax.xml.parsers.DocumentBuilderFactory stati senza mezzi termini:DocumentBuilderFactory è thread-safe in Java 5+?

Un'implementazione della classe DocumentBuilderFactory non è garantito per essere thread-safe. Spetta all'applicazione utente accertarsi dell'utilizzo di DocumentBuilderFactory da più thread. In alternativa, l'applicazione può avere un'istanza di DocumentBuilderFactory per thread. Un'applicazione può utilizzare la stessa istanza della factory per ottenere una o più istanze di DocumentBuilder a condizione che l'istanza della factory non venga utilizzata in più di un thread alla volta.

I documenti Java 5 e Java 6, tuttavia, non dicono nulla del genere. È DocumentBuilderFactory thread-safe ora, o Sun ha appena deciso che l'avvertimento era eccessivo e le persone dovrebbero saperlo meglio?

+0

possibile duplicato di [È un thread DocumentBuilder.parse() sicuro?] (Http://stackoverflow.com/questions/56737/is-documentbuilder-parse-thread-safe) –

+5

Non è un duplicato, la domanda è se è sicuro per più thread per * costruire * DocumentBuilder che utilizzano lo stesso factory, non se è sicuro provare a analizzare più documenti con lo stesso builder. –

risposta

-5

Dal momento che sarebbe stato di pessimo gusto rendere il thread sicuro senza dire i miei soldi è che non è ancora sicuro. Puoi testarlo da solo usando i breakpoint.

13

Un'implementazione della classe DocumentBuilderFactory NON è garantita come thread-safe. Spetta all'applicazione utente accertarsi dell'utilizzo di DocumentBuilderFactory da più thread. In alternativa, l'applicazione può avere un'istanza di DocumentBuilderFactory per thread. Un'applicazione può utilizzare la stessa istanza della factory per ottenere una o più istanze di DocumentBuilder a condizione che l'istanza della factory non venga utilizzata in più di un thread alla volta.

C'è un metodo reset() su DocumentBuilder che lo ripristina allo stato quando è stato creato per la prima volta. Se stai seguendo la rotta ThreadLocal, non dimenticarti di chiamare questo o di fare lo hosed.