2011-04-12 2 views
0

Je suis coincé dans un sérieux problème. J'envoie une requête au serveur qui contient des URL comme données.Si je l'explique, c'est comme si j'avais un fichier qui contient une URL dans un ordre séquentiel Je dois lire ces données séquentielles en utilisant le fil. Maintenant le problème est qu'il y a cent mille URL, je dois envoyer chaque URL dans le serveur dans un temps particulier (supposons supposer 30 secondes). Donc je dois créer des discussions qui serviront la tâche dans le temps désiré. Mais je dois lire le fichier d'une telle manière si le premier thread sert d'abord 100 URL puis 2ème thread servira les 100 prochaines URL et de la même manière les autres threads aussi. Et je le fais dans une programmation socket, donc il y a un seul port à la fois que je peux utiliser. Alors, comment résoudre ce problème. Donnez-moi une idée agréable et simple, et si possible, donnez-moi un exemple aussi.gestion multithread en java

Merci à l'avance

+5

# 1 devoirs? # 2, pouvez-vous montrer au moins 17 (oui 17) lignes de code que vous avez fait? – Neal

+1

Votre question n'est pas assez claire. Pourquoi chaque thread doit-il servir exactement 100 URL? Ne pouvez-vous pas simplement utiliser le prochain thread disponible à partir d'un pool de threads pour servir la prochaine requête quand elle arrive? Aussi, juste pour confirmer: vous devez écrire le serveur ainsi que le client, non? –

+0

Oh, je pense que je comprends - chaque réponse doit contenir exactement 100 URL? Est-ce correct? –

Répondre

2

idée de Nice et simple (si je comprends bien votre question): Vous pouvez utiliser un LinkedList comme une file d'attente. Lisez le fichier de 1 000 urls et mettez-les dans la liste. Créez vos discussions, puis tirez (et supprimez) les 100 prochaines URL de la liste. LinkedList n'est pas thread-safe, vous devez donc synchroniser l'accès vous-même.

0

Une chose que vous pourriez examiner est le cadre de fourche/jointure. La façon dont les didacticiels Java expliquent ceci est la suivante: "Il est conçu pour un travail qui peut être fragmenté en petits morceaux de manière récursive, l'objectif étant d'utiliser toute la puissance de traitement disponible pour rendre votre application rapide". Alors tout ce que vous avez vraiment besoin de faire est de comprendre comment briser vos tâches.

http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

vous pouvez trouver le pot pour cela à: http://g.oswego.edu/dl/concurrency-interest/