2010-08-30 4 views
0

Je vais essayer d'être bref.java: Nouveau sur les threads. Est-ce possible?

Besoin d'un nombre de threads pour ouvrir les sockets (chaque thread ouvre une socket) et faire des requêtes HTTP. Je suis novice en multithread et je ne sais pas si c'est possible, puisque chaque thread doit tourner jusqu'à ce que la requête soit terminée (je pense).

[modifier après commentaires]

Je ne sais pas si cela est possible car fil en cours d'exécution peut être suspendu avant que la réponse est tiré par les cheveux.

Merci pour toute aide.

+0

Courte question, réponse courte: oui, c'est possible – PeterMmm

+1

merci les gens. Je me demandais simplement comment cela est possible puisque chaque thread peut aller dans l'état exécutable et suspendre ses opérations avant que la réponse ne soit récupérée ..... – Andreas

+0

désolé de ne pas l'avoir écrit dans le q – Andreas

Répondre

3

Oui, c'est possible.

En réponse à votre requête plus

Le fait qu'un fil est suspendu ne l'empêche pas de données recieving sur une prise. Si des données arrivent pendant que le thread est suspendu, il est mis en file d'attente jusqu'à la reprise du thread.

+0

+ 1 pour savoir ce que OP demandait, même s'il n'a pas demandé. Signe d'un maître enseignant! – Pete

2

Oui, ce que vous décrivez est très typique parmi les programmes Java qui récupèrent des données via HTTP.

3

Que voulez-vous dire par "suspendu"? Si vous faites référence au changement de contexte entre les threads, vous avez des trous dans votre compréhension du multithreading. C'est la même chose que le multitâche dans un système d'exploitation: vous exécutez Word et Explorer en même temps sur votre machine, et l'application ne meurt pas lorsque l'autre doit être exécutée - le système d'exploitation place un processus/thread en attente en sauvegardant tout son état, puis récupère tout l'état pour le prochain thread, puis le met en mouvement. Cela va et vient si rapidement qu'il semble qu'ils s'exécutent en même temps - mais sur une machine monoprocesseur, un seul thread s'exécute réellement à un moment donné.

Le thread lui-même ne "sait" pas cela - seulement s'il fonctionne continuellement dans une boucle serrée vérifiant l'heure, il remarquera que le temps saccades: Le temps augmente doucement pendant quelques millisecondes, mais soudainement le temps saute vers l'avant et continue encore en douceur pour un nouvel ensemble de millisecondes. Le saut est quand un autre thread était en cours d'exécution. Chaque période de bon fonctionnement est appelée time slice, ou quantique. Mais si le thread n'a pas besoin du processeur, par ex. lorsqu'il attend des E/S, le système d'exploitation le récupère avant la fin de la tranche de temps.

Le thread se termine (dies) lorsque vous quittez/revenez de la méthode run() - pas avant.Pour l'extraction de plusieurs connexions HTTP, le multi-thread est idéal: le thread utilisera la plupart du temps en attente des octets entrants sur le réseau - et pendant qu'il attend, l'OS le sait et enfonce le thread dans "IO wait", au lieu d'exécuter d'autres threads entre temps (ou gaspille juste des cycles si aucun thread n'a besoin de fonctionner, par exemple tout le monde attend des E/S - ou dans ces jours, le processeur ralentit).

+0

Merci stolsvik – Andreas