xml 파싱을 수행하는 함수가 있습니다. 나는 함수 thread를 안전하게하고 싶지만 가능한 한 최적화 된 (블로킹을 줄인다).dom apis에서 java multithreading
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 (IS) 자체의 DocumentBuilder
인스턴스 2) 캐시를 갖도록; 스레드 당
(2)가 가장 좋지만 안전하게 할 수 있을까요? 또한 동기화에 의한 차단을 피할 수 있습니까? 가능한 한 빨리 보내고 싶습니다.
고마워요?
잘 모르겠습니다. 이 코드 샘플에서는 synchronized 메소드를 사용할 필요가 없습니다. 이후로는 리소스를 보호 할 공유 객체가 없습니다. 공유 된 공통 객체가있는 경우 상호 배제하기 위해 공통 객체를 동기화해야합니다. –
@Mohamed Saligh : DocumentBuilder와 DocumentBuilderFactory를 공유하려고합니다. 지금 당장은 아무 문제가 없습니다. – Cratylus