4

私は次のような方法を持っています:

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));
        }
    }
  }

ここで、このメソッドが同じソース (メソッドの 2 番目のパラメーター) で存在するクラスの 2 つの異なるインスタンスで processChildNodes を呼び出そうとしているとします。

4

4 に答える 4

2

オブジェクト ロックを取得しようとしています。同じオブジェクトを渡すと、処理が同期されます。つまり、1 つのスレッドが同期ブロック内のコードを実行し、もう 1 つのスレッドがそれを待機します。ただし、2 つの異なるオブジェクトを渡す場合、それらは 2 つの異なるロックを使用します。つまり、ロックを取得するために相互に依存していません。したがって、両方が並行して実行されます。

コードを記述し、ソース オブジェクトを使用して実行を同期しようとしているように。したがって、両方のスレッドが同じソース オブジェクトを使用して、目的の結果が得られることを確認してください。

于 2013-05-14T05:51:52.237 に答える