синглтоны и темы - PullRequest
       27

синглтоны и темы

0 голосов
/ 26 октября 2009

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

Ответы [ 3 ]

3 голосов
/ 26 октября 2009

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

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

2 голосов
/ 26 октября 2009

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

Это то, для чего темы.

0 голосов
/ 26 октября 2009

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

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

...