这应该是同步方法吗?

时间:2010-08-06 18:16:44

标签: java multithreading synchronization parallel-processing testng

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

然而,当我写这个我编写的外部日志函数时,是否需要同步?是否有可能的竞争条件,其中thread-1进入并设置threadName =“Thread-1”,然后thread-2进入并设置SAME threadName变量=“Thread-2”,然后thread-1选回并打印出来“--foo | Thread-2”?我需要将其作为同步方法吗?

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

2 个答案:

答案 0 :(得分:4)

您的变量 threadName 本地变量。每个线程都会存在一个实例,更准确地说,每个函数调用都会存在一个实例。这意味着他们可以相互影响。

答案 1 :(得分:2)

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