2012-03-22 40 views
16

Java 1.4 docjavax.xml.parsers.DocumentBuilderFactory狀態毫不含糊:DocumentBuilderFactory在Java 5+中是線程安全的嗎?

並對DocumentBuilderFactory類的實現不能保證線程安全的。由用戶應用程序決定是否從多個線程使用DocumentBuilderFactory。或者,應用程序可以爲每個線程擁有一個DocumentBuilderFactory實例。應用程序可以使用工廠的相同實例來獲取DocumentBuilder的一個或多個實例,前提是工廠實例一次不會在多個線程中使用。

然而,Java 5Java 6 docs說什麼都沒有。現在是DocumentBuilderFactory是線程安全的,還是Sun剛剛決定警告是過度殺毒,人們應該知道更好?

+0

可能是[是DocumentBuilder.parse()線程安全的重複?](http://stackoverflow.com/questions/56737/is-documentbuilder-parse-thread-safe) – 2012-03-22 18:48:24

+5

不是重複的,問題是它是否安全的多線程*構造*使用相同的工廠DocumentBuilders,而不是嘗試使用相同的生成器解析多個文檔是安全的。 – 2012-03-22 23:46:06

回答

-5

因爲如果在不告訴我的錢的情況下仍然不安全,它會變得非常惡劣,它會使線程安全。你可以使用斷點自己測試它。

13

DocumentBuilderFactory類的實現不保證是線程安全的。由用戶應用程序決定是否從多個線程使用DocumentBuilderFactory。或者,應用程序可以爲每個線程擁有一個DocumentBuilderFactory實例。應用程序可以使用工廠的相同實例來獲取DocumentBuilder的一個或多個實例,前提是工廠實例一次不會在多個線程中使用。

DocumentBuilder上有一個reset()方法,可以將它恢復到第一次創建時的狀態。如果你正在使用ThreadLocal路由,請不要忘記調用它,否則你會崩潰。

相關問題