我有一个方法:
public void processChildNodes(Node result, Node source) {
synchronized (source) {
NodeList nodes = source.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
processNode(result, nodes.item(i));
}
}
}
现在假设我正在尝试使用类的两个不同实例调用 processChildNodes,其中存在此方法且源相同(方法的第二个参数),这两个执行是否有可能并行进行?
最佳答案
您正在尝试获取对象锁。如果你传递同一个对象,那么你的处理将被同步,这意味着一个线程将执行同步块(synchronized block)内的代码,而另一个线程将等待它。但是如果你传递两个不同的对象,那么它们将使用两个不同的锁,这意味着它们不依赖于彼此来获取锁。所以它们都将并行执行。
当您编写代码并尝试使用源对象同步执行时。因此,请确保您的两个线程都使用相同的源对象来获得所需的结果。
关于java - 一个类的两个实例可以并行调用方法(在某些对象上同步),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535885/