синглтоны и потоки

Мой вопрос касается потоков, поставленных в очередь. В моем примере у меня есть один контекст Spring. У меня есть метод CalculateTax в классе без гражданства. Приходит запрос, создается поток (tA) и в итоге он входит в метод CalculateTax. В течение тех же «временных рамок» приходит еще один запрос и создается еще один поток (tB). Теперь, вот что я хочу понять. Насколько я знаю, tB не может выполнить CalculateTax, пока tA не выйдет из метода. Это правда?


person user195166    schedule 26.10.2009    source источник
comment
В вопросе нигде не упоминается синглтон, является ли контекст весны синглтоном или можно ли удалить весь синглтон?   -  person Janusz    schedule 26.10.2009
comment
Возможно, он имеет в виду, что его bean-компонент в контексте Spring объявлен как синглтон (термин Spring, не обязательно в классическом смысле этого термина), поэтому все запросы получают один и тот же экземпляр объекта - отсюда и беспокойство по поводу параллелизма.   -  person matt b    schedule 26.10.2009


Ответы (3)


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

Однако, если по какой-то причине CalculateTax использует переменные, определенные на уровне класса, и вы используете шаблон Singleton (вы пометили свой вопрос как «singleton», так что я думаю, что да), у вас могут возникнуть проблемы с синхронизацией потоков.

person JonoW    schedule 26.10.2009

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

Для этого и нужны потоки.

person OverLex    schedule 26.10.2009
comment
И разве что вы не сделали метод синхронизированным. - person Adeel Ansari; 26.10.2009
comment
Нет, это не то, что вам нужно ... но если вы это сделаете, каждый поток будет ждать, пока другие закончат свою работу, прежде чем выполнять себя. - person OverLex; 30.10.2009

Вообще говоря, ответ не определен. Если ваш 'запрос' исходит от удаленного клиента, ответ зависит от деталей реализации механизма, используемого для предоставления службы.

Однако я не знаю о платформах удаленной связи, которые действительно заставляют прокси-сервер сериализовать запросы, т. Е. Предполагается, что к ним обращается разработчик целевого сервиса (например, ваша задача — обеспечить потокобезопасность для реализации сервиса ИЛИ сериализовать все запросы, используя явная синхронизация и т. д.).

person denis.zhdanov    schedule 26.10.2009