Подтвердить что ты не робот

Как Spring bean Обработать concurrency

В моем веб-приложении используется spring IOC. Таким образом, все мои spring beans будут одноточечными (по умолчанию). Если два запроса попытаются получить доступ к двум различным методам одного класса. Например: MySpringBean - это класс, который имеет два метода searchRecord и insertRecord. Если в тот же момент оба метода пытаются получить доступ через один и тот же bean.

Как один и тот же spring bean будет доступен для обоих клиентов одновременно или будет проблемой concurrency, когда оба запроса попытаются получить доступ к двум различным методам, но через тот же самый spring bean. и поскольку spring bean является singleton, поэтому новый экземпляр не может быть сформирован. В этом случае, как это будет работать?

4b9b3361

Ответ 1

Вы должны сначала понять, когда concurrency может вызвать проблемы. Если ваш Spring bean не имеет состояния (у него нет полей, все поля final или все они назначаются только один раз), несколько потоков могут безопасно использовать один и тот же bean или даже тот же метод.

См. также:

Ответ 2

Если bean является одиночным, тогда Spring предоставит вам тот же экземпляр в любом потоке. Для вас это сделать bean поточно-безопасным. Поскольку это синглтон, вам лучше всего сделать этот класс без гражданства.

Ответ 3

Как уже говорили другие, Spring будет предоставлять один и тот же экземпляр всем потокам в случае "singleton" beans.

Что вам нужно понять, так это то, что потоки выполняют всю работу в системе, выполняя код, пока объекты предоставляют состояние и поведение (код). Таким образом, действительно возможно, что несколько потоков (запросы в вашем случае) будут одновременно работать с одними и теми же методами в singleton bean. Вы можете сделать такой beans безстоящий, как предложил Томаш, или иначе сделать их "потокобезопасными".