Мой вопрос касается потоков, поставленных в очередь. В моем примере у меня есть один контекст Spring. У меня есть метод CalculateTax в классе без гражданства. Приходит запрос, создается поток (tA) и в итоге он входит в метод CalculateTax. В течение тех же «временных рамок» приходит еще один запрос и создается еще один поток (tB). Теперь, вот что я хочу понять. Насколько я знаю, tB не может выполнить CalculateTax, пока tA не выйдет из метода. Это правда?
синглтоны и потоки
Ответы (3)
Пока CalculateTax использует только локальные переменные (т. е. объявленные в методе), у вас не будет проблем с синхронизацией потоков, и несколько потоков могут вызывать метод без проблем.
Однако, если по какой-то причине CalculateTax использует переменные, определенные на уровне класса, и вы используете шаблон Singleton (вы пометили свой вопрос как «singleton», так что я думаю, что да), у вас могут возникнуть проблемы с синхронизацией потоков.
Нет, это неверно, если они являются параллельными потоками, каждый поток находится в своем собственном стеке выполнения, поэтому он должен иметь возможность выполняться во время выполнения tA.
Для этого и нужны потоки.
Вообще говоря, ответ не определен. Если ваш 'запрос' исходит от удаленного клиента, ответ зависит от деталей реализации механизма, используемого для предоставления службы.
Однако я не знаю о платформах удаленной связи, которые действительно заставляют прокси-сервер сериализовать запросы, т. Е. Предполагается, что к ним обращается разработчик целевого сервиса (например, ваша задача — обеспечить потокобезопасность для реализации сервиса ИЛИ сериализовать все запросы, используя явная синхронизация и т. д.).