J'ai un travail qui prend trop de temps en Java. Donc, je veux diviser ce travail en threads et les exécuter. Une fois que les threads ont terminé leur travail, retourne à mon service et Service leur donne de nouveaux emplois. ThreadGroup convient à cette recommandation ou à toute autre recommandation?Clustering utilisant des threads en Java
Répondre
Vérifiez la ExecutorCompletionService - il fait exactement cela.
Exemple: [tiré de Java 6 JavaDocs API]
void solve(Executor e, Collection<Callable<Result>> solvers)
throws InterruptedException, ExecutionException {
CompletionService<Result> ecs
= new ExecutorCompletionService<Result>(e);
for (Callable<Result> s : solvers)
ecs.submit(s);
int n = solvers.size();
for (int i = 0; i < n; ++i) {
Result r = ecs.take().get();
if (r != null)
use(r);
}
}
Pouvez-vous me donner un échantillon? – firstthumb
Tout d'abord, vous avez besoin des fils si:
a) Vous avez une machine multiprocesseur
ou b) Vous avez un seul processeur, mais vos travaux sont IO-intensive (et non CPU intensive
Sinon, vous ne gagnerez rien lors de l'utilisation de threads.
Qu'est-ce que vous avez besoin ici est ThreadPool
Jetez un oeil à l'emballage java.util.concurrent.
Il y a un tutoriel où vous devriez trouver tout ce que vous devez savoir ici:
http://java.sun.com/docs/books/tutorial/essential/concurrency/
Mise au point sur la High Level Concurrency Objects en particulier.
ThreadGroup
n'est généralement pas très utile pour le code d'application. Ce n'est pas non plus une grande utilité pour le code du conteneur. Le PlugIn Java utilise ThreadGroup
pour distinguer à quelle applet appartient un thread.
java.util.concurrent
, en particulier ExecutorService
, fournit entre autres choses des utilitaires pratiques pour gérer les threads et la concurrence.
Pour les tâches à granularité fine et intensives en termes de calculs, l'infrastructure de jointure de fourche de JDK7 sera utile.
Avant de commencer ce code difficile, vous voudrez peut-être vérifier si cela en vaut la peine. Pouvez-vous faire d'autres optimisations qui ne nécessitent pas une utilisation de thread à grande échelle? Est-ce la latence d'E/S que vous essayez de gérer? S'il est gourmand en ressources processeur, il n'y a pas grand intérêt à utiliser beaucoup plus de threads que ce que vous avez dans le matériel.
Je ne sais pas dans quel état de développement de votre projet est en cours, depuis votre relevé de problème est assez limité, mais vous voudrez peut-être envisager d'obtenir avoir un regard sur le projet de fourche se joindre à venir en JDK7: http://www.ibm.com/developerworks/java/library/j-jtp11137.html
Il y a beaucoup à gagner & apprendre de regarder cela, et puisque tout est open source, vous pouvez déjà télécharger le code comme un correctif et essayer de travailler avec elle.
(peut-être pas applicable pour tout ce que vous devez mettre en œuvre en ce moment, mais en valeur un regard non moins si vous avez l'intention de développer/maintenir votre application pendant un certain temps dans l'avenir)
- 1. Expérience avec le clustering Java?
- 2. threads en Java
- 3. occupé threads d'attente en Java
- 4. Clustering COMET using Terracotta
- 5. Threads Java
- 6. Java: synchronisation des threads sur plusieurs serveurs
- 7. Comment traiter des données dans plusieurs threads en utilisant EJB3?
- 8. En utilisant Application.Run() sur différents threads
- 9. Comment arrêter les threads en Java?
- 10. Rails Subdomain Clustering
- 11. Utilisation des threads en C++
- 12. Matlab: K-means clustering
- 13. Clustering Virtual Earth personnalisé
- 14. XML en utilisant Java
- 15. en utilisant Runtime.exec() en Java
- 16. Comment créer des threads démon?
- 17. Comment lancer une liste en utilisant des génériques en Java?
- 18. Traiter M calculs lents sur N threads en Java
- 19. pratique avec des threads en python
- 20. Algorithme d'organisation des emails en threads?
- 21. Comment partager des données entre différents threads En C# en utilisant AOP?
- 22. . NET équivalent aux groupes de threads Java?
- 23. Comment lancer plusieurs threads depuis Java EE?
- 24. Envoyer RTP en utilisant Java
- 25. Clustering SQL ou images VM
- 26. Tomcat Clustering et HTTPS Édition
- 27. Comment ouvrir un projet différent du projet en cours en utilisant des threads ou des processus en C#.?
- 28. Convertir xml en xsd en utilisant java
- 29. Démarrage d'une classe Java dans différents threads
- 30. Conversion Pdf en Swf en utilisant Java
Par "Donnez-leur des emplois" Je suppose que vous parlez de vos données qui les traverse? Qu'est-ce qui est impliqué dans "leur donner de nouveaux emplois"? – user142350
Dans cette économie, même les fils éprouvent des difficultés à trouver un emploi. . . – Gandalf