Có phải javax.xml.XPathFactory.newInstance() là luồng an toàn không?Java XPathFactory thread-safety
Tôi hỏi vì tôi thấy tài liệu mơ hồ về nó. The JDK 5 docs không đề cập đến thread-safety ở tất cả; trong JDK 6 họ đã viết như sau:
Lớp XPathFactory không an toàn chỉ. Nói cách khác, đó là trách nhiệm của ứng dụng để đảm bảo rằng tối đa một luồng là bằng cách sử dụng đối tượng XPathFactory tại bất kỳ thời điểm cụ thể nào. Việc triển khai được khuyến khích đánh dấu các phương thức là được đồng bộ hóa để tự bảo vệ mình khỏi các khách hàng bị hỏng .
Theo tôi được biết, nó không phải là an toàn để có một thực hiện singleton cho XPathFactory
, nhưng làm một cái gì đó như thế này nên được an toàn:
XPath xPathEvaluator = XPathFactory.newInstance().newXPath();
Tôi có thiếu cái gì? Liệu nó có phụ thuộc vào lớp thực tế mở rộng nó? Tôi có cần synchronize
phương pháp có chứa câu lệnh trên không?
Cảm ơn, tôi đã suy nghĩ tương tự, nhưng tôi muốn đảm bảo lại :). –
Luôn ở đây để nắm tay :-) – Thilo
Có nhiều điều xấu về thiết kế JAXP-XPath. Một trong số đó là XPathFactory.newInstance() rất tốn kém; khác là bạn được dự kiến sẽ gọi nó liên tục trong mỗi chủ đề. Một cách khác là bạn không có cách nào để biết liệu bạn có lấy lại một công cụ XPath 1.0 hay một công cụ XPath 2.0 hay không. Hãy tự hỏi liệu bạn có thực sự muốn sử dụng cơ chế này không: nếu bạn biết công cụ XPath nào bạn muốn, có những cách tốt hơn để tải nó. –