Java jsoup文档是线程安全的吗?
使用jsoupJava jsoup文档是线程安全的吗?,java,thread-safety,jsoup,Java,Thread Safety,Jsoup,使用jsoupsomeDocument是否安全。从多个线程中选择(..),或者读操作是否有一些内部状态?即使类不是线程安全的,也可以从多个线程安全地调用。.select(String cssSelector)方法的底层实现将引用传递给调用此方法的元素(本例中为Document对象),但它不会调用任何更改调用方状态的方法 当您调用.select(String cssSelector)时,您实际上调用了方法,其中root实例是对文档对象的引用 /** Build a list of element
someDocument是否安全。从多个线程中选择(..)
,或者读操作是否有一些内部状态?即使类不是线程安全的,也可以从多个线程安全地调用。.select(String cssSelector)
方法的底层实现将引用传递给调用此方法的元素(本例中为Document
对象),但它不会调用任何更改调用方状态的方法
当您调用.select(String cssSelector)
时,您实际上调用了方法,其中root
实例是对文档
对象的引用
/**
Build a list of elements, by visiting root and every descendant of root, and testing it against the evaluator.
@param eval Evaluator to test elements against
@param root root of tree to descend
@return list of matches; empty if none
*/
public static Elements collect (Evaluator eval, Element root) {
Elements elements = new Elements();
new NodeTraversor(new Accumulator(root, elements, eval)).traverse(root);
return elements;
}
在此方法中,仅更新元素
对象
为什么文档
类不是线程安全的?
Document
类中有一些方法允许在没有任何同步机制的情况下更改对象的状态,例如。在最好的情况下,Document
类应该是最终的且不可变的,所以在多个线程之间共享它的实例不会是一个问题。您看到了吗?是的,但我调用Jsoup.parse
一次,并在多个线程上共享结果(Jsoup.Document
)。我希望对文档的读访问是线程安全的。(我将永远不会写入生成的jsoup.Document
/jsoup.Element
)