2009-03-15 8 views
3

Si une servlet implémente une interférence de modèle à un seul thread, comment le conteneur de servlet garantit-il que les servlets ne traitent qu'une seule requête à la fois? Même l'interface de modèle de fil unique n'a pas de méthodes aussi. Merci.Modèle à un seul fil

Répondre

2

Le conteneur de servlet crée un pool d'instances de servlet et garde la trace des instances actuellement "utilisées". Si toutes les instances sont "en cours d'utilisation" lorsqu'une nouvelle requête arrive, le conteneur peut soit attendre la libération d'un existant, soit créer une nouvelle instance pour gérer la requête. Cependant, le modèle à un seul thread n'est pas très répandu: il est préférable de rendre le servlet lui-même sans état et de gérer plusieurs requêtes simultanément.

+0

S'il vous plaît expliquer pourquoi STM n'est pas largement utilisé? – Warrior

+0

De toute façon, vous devez résoudre tous les problèmes de threads - vous ne pouvez pas stocker d'état sensible mutable dans l'instance de servlet, car il y aura plusieurs instances - vous pouvez donc utiliser le modèle de thread simple pour commencer. Au moins, c'est mon point de vue. –

+0

Donc, nous pouvons avoir une variable locale dans la méthode de service plutôt que la variable d'instance – Warrior

1

L'idée est de ne pas compter sur SingleThreadModel pour prendre soin de question de filetage. Comme il n'est pas obligatoire pour les conteneurs de servlet de se lier au contrat singlethreadmodel, il est conseillé de ne pas s'appuyer sur le conteneur pour instancier plusieurs instances de servlets.

Questions connexes