java – 这应该是同步方法吗?

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

上一篇:Linux 下Firefox无法打开在'.domain'之前带有中划线的域名


下一篇:java – 在现代JVM中双重检查锁定