Comment sont les Threads attribuées pour gérer Servlet demande?
Quelqu'un peut-il expliquer ce qu'est un thread par demande et thread par connexion? Quel est le modèle que les servlets travailler? Comment les threads sont attribuées pour gérer les requêtes HTTP? Est-ce thread/demande de connexion ou d'?
Et disons que si je veux effectuer une tâche qui prend du temps dans mon Servlet
's doGet()
méthode asynchrone, je démarre un nouveau thread à l'aide de Java exécuteurs de sorte que la longueur des calculs sont faits dans un thread séparé et une réponse est envoyée immédiatement.
Maintenant ne fait que s'assurer que j'ai libéré le thread qui a été le traitement de mon HttpServletRequest
ou est-il encore utilisé car un enfant de fil est toujours en cours d'exécution?
Vous devez vous connecter pour publier un commentaire.
Par demande lorsqu'une requête HTTP, un thread est créé ou récupérées à partir d'un pool de servir. Un thread sert l'ensemble de la demande. Thread par connexion serait la même chose, sauf que le thread est utilisé pour l'ensemble d'une connexion, qui peut être de multiples demandes et pourrait aussi avoir beaucoup de temps morts entre deux requêtes. Des conteneurs de Servlet sont thread par demande. Il peut y avoir des implémentations qui offre un thread par connexion, mais je ne sais pas, et il me semble qu'il serait très inutile.
Création d'un thread à l'intérieur d'un autre thread n'a pas à établir une quelconque relation particulière, et le point de le faire dans la plupart des cas, c'est de laisser le fil conducteur de faire plus de travail ou de mettre fin tandis que l'autre thread continue de travailler. Dans votre scénario, en utilisant un autre thread pour faire le travail requis par une demande, comme vous l'attendez, laissez la réponse à être envoyé immédiatement. Le fil utilisé pour servir cette demande sera immédiatement disponible pour une autre demande, peu importe combien de temps votre autre thread d'exécution. C'est à peu près la façon de faire du travail asynchrone dans un fil de discussion-par-requête conteneur de servlet.
Mise en garde: Si vous êtes dans un conteneur Java EE, les threads peuvent être gérés pour vous dans une manière qui en fait une mauvaise idée de lancer votre propre. Dans ce cas, vous êtes mieux de demander le conteneur d'un fil, mais les principes généraux sont les mêmes.