Działanie servletów

Działanie servletów
DamianSn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Siemka. Od jakiegoś czasu dręczy mnie jedno pytanie, a mianowicie z czego wynika to, że pisząc w Springu ( nie webflux ) czy tam innym frameworku bazującym na servletach nie musimy przejmować się wielowątkowością ( zakładając, że kod wykonuje się tylko synchronicznie ). Wysyłając wiele zapytań na raz zostanie wykorzystane kilka wątków. Każdy otrzymuje osobą instancję servletu czy pracuje na tej samej ?

damianem
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 205
1

nie musimy przejmować się wielowątkowością ( zakładając, że kod wykonuje się tylko synchronicznie )

Oczywiście że musimy - właśnie dlatego, że instancje servletów są dzielone przez wiele wątków

DamianSn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Czyli jeśli dobrze rozumiem to gdyby dodać pole ( np int ) w jednej z warstw, które mogłoby być modyfikowane przez wiele wątków(wiele zapytań w jednym momencie) to operacja ta powinna znajdować się w bloku synchronized i być volatile ?

damianem
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 205
0
DamianSn napisał(a):

Czyli jeśli dobrze rozumiem to gdyby np. dodać pole w jednej z warstw, które mogłoby być modyfikowane przez wiele wątków(wiele zapytań w jednym momencie) to operacja ta powinna znajdować się w bloku synchronized i być valotile ?

Generalnie tak, taki globalny stan powinien być synchronizowany jeśli operacje na nim wykonuje wiele wątków i nie jest to specyficzne tylko dla servletów.

Edit: Lepiej może powiedzieć "zabezpieczony" niż synchronizowany, bo tak jak napisał poniżej @scibi92 możemy do tego celu użyć różnych narzędzi z java.util.concurrent zamiast prymitywów typu synchronized czy volatile.

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
1

@DamianSn, nie to znaczy że musisz zapewnić żeby była bezpiecznosc. ConcurrentMap nie wymaga ani synchronized ani volatile, tylko final by się przydało...

damianem
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 205
1

Jeden z pierwszych przykładów z książki "Java Concurrency in Practice":

screenshot-20190608144616.png

DamianSn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Dzięki. Miałem trochę rozkminę bo w sumie dane zawsze pochodziły z bazy, pól nie modyfikowałem, które byłyby wspólne dla wielu wątków ( co jest w sumie nawet chyba wymagane przez zasadę stateless w restach ). A widziałem wielokrotnie repozytoria z serwisami gdzie trzymano dane w kolekcjach nieprzeznaczonych do obsługi przez wiele wątków i trochę się zgłupiałem :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.