Несинхронизированные статические методы и безопасность потоков - PullRequest
0 голосов
/ 28 июня 2011

Допустим, у меня есть следующий метод, безопасен ли метод потока?

public static void forwardProcessingPerStudy(String str)
{
        someNonStaticMethodProcessingOnObj(str);
}

I.e. Могут ли два отдельных потока запустить вышеуказанный метод одновременно, передавая разные экземпляры str (скажем, два совершенно разных строковых объекта) и конфликтуя друг с другом?

Чтобы метод был безопасным для использования потоков, нужно ли делать его синхронизированным?

Ответы [ 4 ]

4 голосов
/ 28 июня 2011

Да, два разных потока могут одновременно запускать этот метод, используя либо одну и ту же строковую ссылку, либо другую.

Что касается необходимости синхронизации, это полностью зависит от того, что someNonStaticMethodProcessingOnObj делаетИмя подразумевает, что он вызывает нестатический метод, но, учитывая, что вы не указываете экземпляр для вызова, это маловероятно.

Если тело метода (и любые вызываемые методы) ничего не делают с каким-либо общим состоянием, вам не о чем беспокоиться.Если это произойдет, вам нужно подумать более тщательно.

0 голосов
/ 28 июня 2011

Вот ответ на аналогичный вопрос, где я добавил несколько примеров, которые могут прояснить это для вас: разница между синхронизацией статического метода и нестатического метода

Дело в том, чтодобавление синхронизированного к внешнему методу может не помочь, поскольку оно синхронизируется с соответствующим объектом Class.Внутренний метод может потребоваться синхронизировать с чем-то другим.Так что нужна осторожность.

0 голосов
/ 28 июня 2011

Показанный метод является потокобезопасным, поскольку он не имеет доступа к информации о состоянии любого объекта.

При этом мы понятия не имеем, является ли someNonStaticMethdoProcessingOnObj () значением или нет, не говоря уже о том, что имя подразумевает, что оно не является статичным, но оно не работает с любым экземпляром.

0 голосов
/ 28 июня 2011

Да.

Нет.

Но ответы с методом someNonStaticMethodProcessingOnObj могут отличаться.

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