2012-09-20 17 views
16

Czy każde żądanie HTTP uzyskuje dostęp do tego samego obiektu serwletu, ale do innego wątku? lub czy tworzy nowy wątek i nową instancję Servlet?Czy każde żądanie uzyskuje dostęp do tego samego obiektu serwletu?

+0

Dlaczego nie utworzyć instancji serwletu na żądanie? –

+0

możliwy duplikat [Jak działają serwlety? Tworzenie, zmienne sesji i wielowątkowość] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC

Odpowiedz

12

Kontener użyje tej samej instancji serwera serwletów, jeśli serwlet nie implementuje SingleThreadModel. W przeciwnym razie nie ma gwarancji, że zostanie uderzony ten sam obiekt Servlet. Kontener może tworzyć więcej instancji servletu, jeśli uzna to za konieczne. Ale prośby przychodzą na różne tematy, niekoniecznie nowo utworzone (jak wspomniał Sanjay).

Od specyfikacją Servlet 3.0:

Dla serwletu nie gościł w środowisku rozproszonym (domyślnie), kontener serwletów musi wykorzystać tylko jedną instancję za deklaracją serwletu. Jednak w przypadku serwletu implementującego interfejs SingleThreadModel, kontener serwletu może utworzyć instancję wielu instancji, aby obsłużyć duże obciążenie żądania i przekształcić do żądań szeregowych do określonej instancji.

...

Ogólnie pojemnik Web obsługuje jednoczesnych żądań do tego samego serwletu autorem równoczesne wykonanie metody usługi na różnych wątkach.

7

Każde żądanie HTTP tworzy nowy wątek, ale uzyskuje dostęp do tej samej instancji Serwletu.

EDYCJA: W przypadku jednego węzła serwera, będziesz mieć tę samą instancję Servlet na tym węźle. W przypadku równoważenia obciążenia/wielu serwerów, zazwyczaj będziesz mieć jedną instancję na maszynę wirtualną Java.

+6

Jestem prawie pewien, że tak naprawdę nie * twórz * nowy wątek zawsze; bardziej jak podnosi wolny wątek z istniejącej puli wątków. –

+1

@ SanjayT.Sharma Masz rację, często jest to robione w ten sposób (ze względu na wydajność), ale jest to szczegół implementacji kontenera serwera aplikacji/serwletu i twój kod nie powinien na tym polegać. –

Powiązane problemy