4

私は TestNG を使用してテストを並行して実行していますが、ヘルパー クラスとユーティリティで発生する可能性のある同期の問題に注意したいと考えています。私の知る限り、各テストは、テスト ランナーによって透過的に作成された独自のオブジェクトです。したがって、非静的なものの同期について心配する必要はありません。これは、スレッドで作成されたオブジェクトであり、他のオブジェクトからは見えないためです。

しかし、私が書いたこの外部ログ関数を呼び出す場合、同期する必要がありますか? thread-1 が入力して threadName="Thread-1" を設定し、次に thread-2 が入力して SAME threadName 変数 = "Thread-2" を設定し、次に thread-1 がバックアップを取得して出力する競合状態が発生する可能性はありますか? "--foo | スレッド 2"? これを同期メソッドにする必要がありますか?

public static void log(String _message) {
  String threadName = Thread.currentThread().getName();
  log.println("--" + _message + " | Thread: " + threadName);
}
4

2 に答える 2

4

変数threadNameローカル変数ですスレッドごとに 1 つのインスタンスが存在します。より正確には、関数呼び出しごとに 1 つのインスタンスが存在します。これは、それらが互いに影響を与えることができないことを意味します。

于 2010-08-06T18:18:33.200 に答える
2

上記のマーカスの発言を強調すると、このログ フィールドは何ですか? スレッド セーフであることを確認してください。そうしないと、ログ メッセージが混同されて表示されます。

于 2010-08-07T02:02:47.550 に答える