私はxml解析を行う関数を持っています。私は関数スレッドを安全にしたいが、できるだけ最適化された(ブロッキングが少ない)ようにしたい。dom apiのJavaマルチスレッド
public Document doXML(InputStream s)
{
//Some processing.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document xmlDoc = parser.parse(is);
return xmlDoc;
}
しかし、私は、各呼び出しで新しいのDocumentBuilderFactoryまたはDocumentBuilderのを作成する必要はありません。次のように短いコードで
は何かです。
私はファクトリとパーサを再利用したいが、スレッドセーフであるとは確信できません。だから最適なアプローチは何ですか?
1) DocumentBuilderFactoryをクラスフィールドにキャッシュし、factory.newDocumentBuilder()を同期させます。キャッシュのDocumentBuilderFactory とてDocumentBuilderと同期parser.parse(である))は、各スレッドがDocumentBuilderの
2の独自のインスタンスを有するように、スレッドごとに
私は(2)が最適だと思いますが、それは安全ですか?また、同期してブロックすることもできますか?私はできるだけ早くそれをしたいと思います。
ありがとうございます。
わかりません。このコードサンプルでは、synchronizedメソッドを使用する必要はありません。以来、あなたのリソースを保護するための共有オブジェクトはありません。共通の共通オブジェクトがある場合は、それらを相互に排他的にするために同期させる必要があります。 –
@Mohamed Saligh:DocumentBuilderとDocumentBuilderFactoryを共有したいと思います。今すぐ、あなたは問題はありません。 – Cratylus