2011-04-04 2 views
1

J'ai besoin de faire une requête Web à un serveur RESTful de Java. Je voudrais que mon code Java gère la réponse de manière asynchrone. Je suis à la recherche d'un framework qui gère le threading et les callbacks de la requête. En passant, j'ai regardé FutureTask et ça ne semble pas être ce dont j'ai besoin car cela demande au client d'attendre qu'il se termine à un moment donné. Je suis à la recherche d'un rappel à la fin.Comment faire une demande Web de manière asynchrone

Répondre

3

D'ailleurs, je pris un coup d'œil à FutureTask et il ne semble pas être ce que je dois, car il exige que le client d'attendre qu'elle se termine à un moment donné.

Vous n'avez pas doivent appel FutureTask.get() du fil initiation afin d'obtenir les résultats de la tâche. Vous pouvez simplement avoir le Callable passé au FutureTask également gérer communiquer sa sortie à un autre composant. Les méthodes get() sont là pour que vous puissiez obtenir les résultats du calcul asynchrone, ce qui peut impliquer d'attendre que le calcul se termine s'il ne l'a pas encore fait.

Si vous préférez le style de rappel, Callable peut simplement appeler un rappel de votre propre construction ou gérer le résultat par vous-même.

+0

C'est une bonne suggestion et logique. J'ai rencontré la classe ThreadPoolExecutor, qui semble fournir des fonctionnalités similaires. Est-ce que FutureTask a un thread ou utilise un pool de threads? –

+0

FutureTask ne fait que contourner un Callable et est destiné à être utilisé par un ExecutorService (ou un service similaire). –

1

Ceci est facilement résolu en java avec le motif d'observateur

  • Créer une classe qui étend Observable et met en œuvre Runnable
  • instancier passer URL à elle.
  • objet principal implémente Observer, enregistre avec une nouvelle classe en qualité d'observateur
  • Exécutez votre Runnable, il fait un blocage HttpUrlConneciton, aviserait observateur des résultats lorsque vous avez terminé
  • répétition nécessaire.
Questions connexes