java - 一个类的两个实例可以并行调用方法(在某些对象上同步)

标签 java

我有一个方法:

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/

相关文章:

java - Hibernate N+1 带有 DTO 对象的 SELECT

java - java中递归获取文件和目录列表

java - 读取位图文件返回 null

java - SpagoBI 多值参数

java - 从文本文件中将尽可能多的元素读入整数数组(由用户输入)

java - @Scheduled & 调度程序 : What exactly does pool-size do?

java - Java构造函数中的最终参数

java - 使用 .append(string1 + string 2) 与 .append(string1).append(string2)

java - 从 jcombobox 中移除焦点后,itemlistener 获取事件

java - 在哪里添加数组?