我有一個函數可以執行xml解析。我想使函數線程安全,但也儘可能優化(更少的阻塞)。
在短碼的東西如下:關於多線程的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();以便每個線程具有它自己的DocumentBuilder
實例 2)緩存一個的DocumentBuilderFactory 和的DocumentBuilder和同步parser.parse(是);每個線程
我認爲(2)是最好的,但它是安全的嗎?我也可以通過同步避免阻塞?我希望它儘可能快。
謝謝?
我不是很確定。在這個代碼示例中,您不需要使用同步方法。由於沒有共享對象來保護您的資源。如果你有任何共享的公共對象,你必須同步它們才能相互排斥。 – 2010-11-18 16:51:36
@Mohamed Saligh:我想讓DocumentBuilder和DocumentBuilderFactory共享。現在,你是對的沒有問題 – Cratylus 2010-11-18 17:01:53