我正在使用 TestNG 并行运行测试,并希望注意与帮助程序类和实用程序可能出现的同步问题。据我所知,每个测试都是它自己的对象,由测试运行器透明地创建。因此,我不需要担心同步任何非静态的东西,因为它将是一个在线程中创建的对象,因此对其他对象不可见。

但是,当我调用我编写的这个外部日志函数时,它是否需要同步?是否存在可能的竞争条件,线程 1 进入并设置 threadName="Thread-1",然后线程 2 进入并设置 SAME threadName 变量 = "Thread-2",然后线程 1 取回并打印出来“--foo | Thread-2”?我需要使它成为同步方法吗?

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

最佳答案

您的变量 threadName 是 局部变量 。每个线程 都会有一个实例 ,更准确地说,每个函数调用都会有一个实例。这意味着它们可以 而不是 相互影响。

10-08 17:04