Threads Tomcat vs threads Java
Lors de l'utilisation de threads java, on doit prendre soin des problèmes de base qui viennent avec la concurrence d'accès grâce à la synchronisation etc.
Autant que je sache, Tomcat fonctionne également avec des threads pour gérer sa charge de travail. Pourquoi est-il, que je n'ai pas penser à le rendre mon code threads lorsqu'il est en cours d'exécution dans Tomcat?
source d'informationauteur black666
Vous devez vous connecter pour publier un commentaire.
Vous ne avez à faire votre code thread-safe dans tomcat. Tomcat va appeler votre code (c'est à dire vos servlets) à partir de plusieurs threads, et si ce code n'est pas thread-safe, vous aurez des problèmes.
Tomcat, les threads ne sont pas différents de tous les threads que vous créez vous-même.
À ajouter sur ce que skaffman a mentionné, il pourrait sembler que vous n'avez pas besoin de penser à propos de multi-threading lors de l'écriture d'une webapp parce que la Servlet cadre/API est complètement orienté autour de la mise en œuvre de méthodes (
service()
doGet()
doPost()
etc) qui sont appelées une fois par requête HTTP.Par conséquent, dans une application simple, vous pouvez mettre en œuvre ces méthodes dans votre servlet et/ou JSP ou quoi que ce soit et ne pas penser à ce qui se passe lorsque plusieurs threads interagir.
Mais à la seconde où vous commencez à avoir un état partagé entre les servlets ou des méthodes de service, puis, sans probablement s'en rendre compte vous de gérer plusieurs threads en interaction, et si vous n'êtes pas prudent, vous finirez par avoir le multi-threading ou des problèmes de synchronisation. Vous aurez à traiter avec cela parce que, dans Tomcat (et je suppose que tous les conteneurs de servlet, bien que je ne sais pas si c'est requis par la Servlet spec) chaque demande est traitée par (peut-être) un thread différent. Par conséquent, si vous recevez deux demandes simultanées, celles-ci seront traitées par deux threads simultanément (en même temps).
Si vous pensez que Tomcat permet à votre application de thread-safe écrire une Servlet avec mutable variables de membre comme une non-concordance table de hachage.
Alors la servlet mettre les choses dans cette table de hachage pour chaque demande. Il ne faudra pas longtemps pour obtenir une belle simultanéité exception.
C'est pourquoi, en général, pour singleton-comme composants que vous devez être très prudent avec les variables, car ils sont partagés entre plusieurs threads accèdent à l'objet.
Maintenant le conteneur de servlet créer un nouveau transitoire de l'objet pour chaque requête (qui est ce que certains web app cadres de le faire), vous pouvez mettre de comportement qui ont interagi avec les variables de membre dans ce transitoire objet et être thread-safe.
Parce que Java EE conteneurs sont écrits de telle manière qu'ils traitent les enfiler pour vous. Vous écrivez votre code doit être thread-safe et le conteneur fait le reste. Il pools de threads et leur attribue un par demande comme ils viennent dans.