Должен ли это быть синхронизированный метод? - PullRequest
4 голосов
/ 06 августа 2010

Я использую TestNG для параллельного запуска тестов и хочу быть осторожным с возможными проблемами синхронизации с вспомогательными классами и утилитами.Насколько мне известно, каждый тест - это собственный объект, прозрачно созданный организатором теста.Таким образом, мне не нужно беспокоиться о синхронизации чего-либо нестатического, поскольку это будет объект, созданный в потоке, и, следовательно, не видимый для других.

Однако, когда я выполняю вызовы этоговне функции журнала я написал, это нужно синхронизировать?Есть ли возможное состояние гонки, когда thread-1 входит и устанавливает threadName = "Thread-1", затем thread-2 входит и устанавливает ту же переменную threadName = "Thread-2", а затем thread-1 возвращает обратно и печатает"--foo | Тема-2"?Нужно ли сделать этот метод синхронизированным?

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

Ответы [ 2 ]

4 голосов
/ 06 августа 2010

Ваша переменная threadName является локальной переменной . Там будет один экземпляр для каждого потока , точнее, будет существовать один экземпляр для каждого вызова функции. Это означает, что они могут не влиять друг на друга.

2 голосов
/ 07 августа 2010

Подчеркивая сказанное Маркусом: что это за поле журнала?Убедитесь, что это потокобезопасный, иначе вы увидите смешанные сообщения журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...