Является ли DocumentBuilderFactory потокобезопасным в Java 5+?
Java 1.4 doc для javax.xml.parsers.DocumentBuilderFactory
заявляет недвусмысленно:
Внедрение класса DocumentBuilderFactory НЕ гарантируется потокобезопасностью. Это зависит от пользовательского приложения, чтобы убедиться в использовании DocumentBuilderFactory из нескольких потоков. В качестве альтернативы приложение может иметь один экземпляр DocumentBuilderFactory для каждого потока. Приложение может использовать один и тот же экземпляр factory для получения одного или нескольких экземпляров DocumentBuilder, если экземпляр factory не используется одновременно в нескольких потоках.
Java 5 и Java 6 docs, однако, не говорите ничего подобного. Является ли DocumentBuilderFactory
потокобезопасным сейчас, или Sun просто решил, что предупреждение было излишним, и люди должны знать лучше?
Ответы
Ответ 1
Внедрение класса DocumentBuilderFactory НЕ гарантируется потокобезопасностью. Это зависит от пользовательского приложения, чтобы убедиться в использовании DocumentBuilderFactory из нескольких потоков. В качестве альтернативы приложение может иметь один экземпляр DocumentBuilderFactory для каждого потока. Приложение может использовать один и тот же экземпляр factory для получения одного или нескольких экземпляров DocumentBuilder, если экземпляр factory не используется одновременно в нескольких потоках.
В DocumentBuilder существует метод reset(), который восстанавливает его состояние, когда оно было впервые создано. Если вы идете по пути ThreadLocal, не забудьте позвонить или у вас есть.
Ответ 2
Так как это было бы в крайне плохом вкусе, чтобы сделать его потокобезопасным, не сказав, что мои деньги - это все еще небезопасно. Вы можете проверить это самостоятельно, используя точки останова.