2012-09-20 16 views
16

Ogni richiesta HTTP accede allo stesso oggetto servlet ma in un thread diverso? o crea un nuovo thread e una nuova istanza Servlet?Ogni richiesta accede allo stesso oggetto servlet?

+0

Perché non istanziare un servlet su richiesta? –

+0

possibile duplicato di [Come funzionano le servlet? Istanziazione, variabili di sessione e multithreading] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC

risposta

12

Il contenitore utilizzerà la stessa istanza servlet se il servlet non implementa SingleThreadModel. Altrimenti non è garantito che lo stesso oggetto Servlet venga colpito. Il contenitore è libero di creare più istanze di servlet se lo ritiene necessario. Ma le richieste arrivano su fili diversi, non necessariamente creati di recente (come ha detto Sanjay).

Dalla specifica Servlet 3.0:

Per un servlet non ospitati in un ambiente distribuito (impostazione predefinita), il contenitore di servlet deve utilizzare una sola istanza per dichiarazione servlet. Tuttavia, per un servlet che implementa l'interfaccia SingleThreadModel, il contenitore servlet può istanziare più istanze per gestire un carico di richieste pesanti e serializzare le richieste in una particolare istanza.

...

Generalmente il contenitore Web gestisce richieste simultanee alla stessa servlet di esecuzione simultanea del metodo del servizio su diversi thread.

7

Ogni richiesta HTTP crea un nuovo thread ma accede alla stessa istanza del Servlet.

MODIFICA: in caso di un nodo server, si avrà la stessa istanza Servlet su quel nodo. In caso di bilanciamento del carico/molti server di solito si dispone di un'istanza per Java VM.

+6

Sono abbastanza sicuro che non sia realmente * crea * un nuovo thread sempre; più simile preleva un thread gratuito da un pool di thread esistente. –

+1

@ SanjayT.Sharma Hai ragione, è spesso fatto in questo modo (per motivi di prestazioni), ma questo è il dettaglio dell'implementazione del server applicazioni/servlet e il tuo codice non dovrebbe dipendere da quello –

Problemi correlati