4

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

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

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

2 回答 2

4

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

于 2010-08-06T18:18:33.200 回答
2

强调一下Marcus上面所说的:这个日志字段是什么?确保它是线程安全的,否则您将看到混合的日志消息。

于 2010-08-07T02:02:47.550 回答