我正在使用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);
}
解决方法:
您的变量threadName是一个局部变量.每个线程都会有一个实例,更准确地说,每个函数调用都会有一个实例.这意味着它们不会相互影响.