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
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.
Cela dépend de l'implémentation. Il peut créer le pool d'instances de servlet ou bien il peut simplement avoir une seule instance de servlet et en synchroniser l'accès. Ce dernier conduit à plus de contention.
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/SingleThreadModel.html
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.
S'il vous plaît expliquer pourquoi STM n'est pas largement utilisé? – Warrior
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. –
Donc, nous pouvons avoir une variable locale dans la méthode de service plutôt que la variable d'instance – Warrior