Quand/Pourquoi devrais-je utiliser le multi thread en Java?
Je ne sais pas quand je dois utiliser Multithread dans le développement Java, et la logique/raison de l'utiliser. Comment est-il utile dans différents scénarios?
Scénario 1
Je suis en train de faire un 2D à défilement jeu avec des ennemis et tout cela, penser à metal slug
Scénario 2
Je suis en train de faire une base de données démon de vérifier plusieurs base de données de contenu.
Scénario 3
Je suis en train de faire un servlet, JSP, avec quelques informations extraites de la base de données.
N'hésitez pas à modifier les scénarios de faire mieux.
En plus: dois-je utiliser optimisé pour les serveurs de jeu? Ou devrais-je pas?
- trop génériques question...
- Bien.... J'ai cherché un peu et j'ai trouvé ceci, mais je n'étais pas satisfait de la réponse. Donc, je re-demandé d'une façon que je le voulais . Si c'est trop large, alors il en est de cette question: stackoverflow.com/questions/7419619
- Je crois que la question est suffisamment précise pour être mis hors de tenir maintenant.
- Veuillez prendre ceci en garde. Ai-je besoin de dire à donner mon code source pour le public d'être assez précis?
Vous devez vous connecter pour publier un commentaire.
Vous devriez changer votre programme d'utiliser des threads pour un couple de raisons différentes.
Lorsque le programme s'exécuter beaucoup plus rapide et une meilleure utilisation de la multi-CPU/architecture de base que vous exécutez sur. J'utilise le mot "significative" parce que, souvent, l'ajout de threads ajoute beaucoup de complexité et de 20% d'amélioration de la vitesse peut ne pas être en vaut la peine.
Il peut être difficile, cependant, de déterminer si votre programme va rendre l'utilisation de plusieurs processeurs, de sorte que la refonte du programme est un bon investissement. Seulement si il y a beaucoup de traitement/calcul impliqués que vous obtenez une augmentation de la vitesse. Si, par exemple, votre programme est en attente d'e /s (disque ou sur le réseau de la lecture ou de l'écriture), alors vous pourriez passer beaucoup de travail de la division d'un programme en plusieurs threads ne voir aucune amélioration de la vitesse.
Lorsqu'il y a plusieurs pièces de votre programme qui doit être en cours d'exécution simultanément. Non pas qu'il ne pouvait pas s'exécuter dans un thread, mais cela serait plus compliqué. Par exemple, un serveur web a plusieurs demande de la manipulation de threads, car il est plus facile de chaque thread gérer une seule demande même si vous ne pouvez pas mettre une tonne de charge par le serveur, de sorte que plusieurs threads en fait effectuer plus rapidement.
Je pense que les mêmes réponses ci-dessus s'appliquent. En général, les servlets sont des très petites tâches qui sont conçus pour revenir rapidement, de sorte qu'il est relativement inhabituel pour eux de fourche threads. Cependant, si il y a un travail de longue haleine qu'un servlet doit commencer, mais vous voulez le retour de Départ "travail", le type de réponse puis un thread sera nécessaire.
Il est important de noter que par le temps de votre servlet est exécutée, l'amont gestionnaire est probablement déjà fait usage d'un pool de threads de sorte que vous n'avez pas à faire quoi que ce soit.
Edit:
Je n'ai pas de bonne réponse à cette question. Dépend si il y a beaucoup de rendu en cours et cela dépend de ce que les trousses d'outils que vous utilisez.
Les Chances sont que vous allez être à la base de données IO liés, de sorte que plusieurs threads ne peuvent pas vous donner quoi que ce soit. Et puis, si vous avez des requêtes de longue durée, vous pouvez obtenir une certaine amélioration, si court requêtes peuvent être exécutés en parallèle sur d'autres threads. Cela dépend aussi de la façon dont votre base de données gère les connexions multiples.
Si la réponse a attendre pour que les informations puissent être récupérés puis il n'y a pas de raison de le faire dans un autre thread. Cependant, comme je l'ai mentionné ci-dessus, si la servlet est d'essayer de fourche une sorte de transaction de base de données qui s'exécute en arrière-plan, alors vous devriez utiliser un thread.
Encore une fois, la plupart des conteneurs de servlet sont déjà en cours d'exécution à l'intérieur d'un pool de threads.
Utiliser le Multi-Threading lorsque vous pouvez vous pensez que quelque chose peut être parallélisée, ou il peut être asynchrone.
Parallélisée Par exemple: lors de la construction de Web crawlers, vous pouvez avoir des fils parallèles qui parcourir les différentes pages, etc. Cela peut aussi signifier une meilleure utilisation des ressources (CPU, I/O, etc)
Asynchrone dans le sens, dans le cas des produits de consommation où vous avez un bloc de code de produire des choses et le reste de la consommer.
Disons que vous avez une application qui est en charge de téléchargement d'un fichier, si vous n'avez pas l'utilisation de plusieurs threads, toutes les autres instructions attendre jusqu'à ce que le fichier fini de télécharger. Swing par exemple, utiliser un filet afin d'afficher son interface graphique, de sorte que vous devriez jeter un oeil à cette tutoriel et de lire un peu de la simultanéité
-Alors vous ne devriez pas. Aussi, si vous pouvez l'éviter, par tous les moyens le faire.
Quand: Un exemple: Si vous avez besoin de récupérer des parts de marché des valeurs de différents stocks à partir de plusieurs sites/ressources exactement en même temps de mettre à jour les différents systèmes de courtage, vous devrez peut-être qu'un seul thread aura pour se rendre d'un site d'abord avant d'essayer d'obtenir de la suivante.
En fonction de votre montage dans votre question-
Oui, vous pouvez. Un exemple serait de faire le chargement des ressources dans un thread, tout en affichant un "Chargement..." animation sur l'écran dans un autre thread.
if you can avoid it, by all means do so.
Ouais, lorsqu'il est utilisé de manière inappropriée ou incorrecte, il peut causer un problème, mais cela ne signifie pas qu'il doit être évité à tous les frais. Le Multithreading doit être utilisée de manière responsable.Ce n'est pas vraiment comme vous une fois apprendre le multithreading, puis vous l'utilisez tout le temps partout. Vous utilisez le multithreading quand vous en avez besoin.
Par exemple, vous avez un long travail à faire, et vous ne voulez pas bloquer l'INTERFACE utilisateur, vous pouvez faire le travail sur un autre thread, tandis que l'INTERFACE fonctionne encore bien. Ce serait un scénario.
Une autre serait de calculer quelque chose de complexe qui peut être fait en plusieurs étapes, alors il pourrait être fait en parallèle à l'utilisation du multithreading.