2016-10-03 4 views
3

Я изучал пакет java.util.concurrent Java, и следующий вопрос пришел мне на ум: при использовании Spring Framework мне следует беспокоиться о многопоточных сценариях?Безопасность весны и ниток

Например, у меня есть API, основанный на Spring Boot. Одна из моих служб отдыха обновляет ArrayList. Однако ArrayList не является потокобезопасным, что может привести к несогласованным данным. Тем не менее, я использую Spring Framework.

Вопрос: Должен ли я изменить текущий текущий ArrayList на одну из параллельных коллекций Java или Spring Framework сама по себе является потокобезопасной, и я не должен беспокоиться о сценариях с несколькими потоками?

ответ

2

Ваш сервис REST должен быть написан так, чтобы он был потокобезопасным. Это означает отсутствие частных данных, которые изменяются. Если это так, вы в безопасности.

Если все ваши методы используют переменные области метода, то вы потокобезопасны.

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

Вы должны всегда беспокоиться о многопоточных сценариях.

Если ваша служба REST должна взаимодействовать с базой данных, соединение не должно быть общим. Вам нужен объединенный источник данных, который проверяет соединение для каждого запроса, использует его в области метода и возвращает его в пул. Соединения JDBC не являются потокобезопасными, но вы избегаете его, потому что вы объединяете их.

0

Spring MVC (Spring Boot RestServices) основан на API-интерфейсе Servlet. Сервлеты многопоточны, поэтому вы должны заботиться о параллелизме.

Но это зависит от того, как вы программируете. Если вы переменные - это переменные класса/члены класса, тогда вам нужно позаботиться о параллелизме, но если ваши переменные объявлены внутри методов, то это поточно-безопасный.

Смежные вопросы