Comment en attente d'un thread

Je veux lancer un thread pour certains montant fixe de temps. Si elle n'est pas remplie dans le temps, j'ai envie de tuer, de lancer une exception, ou la poignée d'une certaine façon. Comment peut-il être fait?

Une seule façon de faire que j'ai compris de ce fil
est d'utiliser un TimerTask à l'intérieur de la méthode run() du Thread.

Y a de meilleures solutions pour cela?

 

EDIT: Ajout d'un bounty que j'avais besoin d'une réponse plus claire. Le ExecutorService de code ci-dessous ne résout pas mon problème. Pourquoi devrais-je dormir() après l'exécution (code - je n'ai pas de poignée plus de ce morceau de code)? Si le code est terminé et le sleep() est interrompue, comment cela peut-il être un délai d'attente?

La tâche qui doit être exécutée n'est pas en mon pouvoir. Il peut être n'importe quel morceau de code. Le problème, c'est ce morceau de code peut s'exécuter dans une boucle infinie. Je ne veux pas que cela se produise. Donc, je veux juste pour exécuter la tâche dans un thread séparé. Le parent thread doit attendre jusqu'à ce que le thread des finitions et des besoins de connaître l'état de la tâche (j'.e si elle a expiré ou une exception s'est produite ou si c'est un succès). Si la tâche entre dans une boucle infinie, mon parent fil continue à attendre indéfiniment, ce qui n'est pas une situation idéale.

  • EDIT: Ajout d'un bounty que j'avais besoin de plus de réponse claire. le ExecutorService de code ci-dessous ne résout pas mon problème. Pourquoi devrais-je dormir() après l'exécution de mon code? Si le code est terminé et le sleep() est interrompue, comment cela peut-il être un délai d'attente?
  • Que sleep() était juste un stub pour représenter le "temps long tâche en cours d'exécution". Il suffit de remplacer avec votre tâche réelle 😉
  • ... un "temps long tâche en cours d'exécution" qui arrive à répondre à interrupt() appels sur son fil... pas tout "blocage", les appels, comme j'ai essayé de préciser dans ma réponse. Les spécificités de la tâche que vous essayez d'abort faire une énorme différence dans l'approche qui devrait être utilisé. Plus d'informations sur la tâche serait utile.
  • Si ces réponses ne sont pas de résoudre le problème, alors je suppose que plus de détails/code devraient vous aider à répondre.
  • Ces threads que vous voulez de limite dans le temps; ils blocage des appels, ou sont-ils dans certains boucle où vous pouvez facilement vérifier certaines variables pour voir si il est temps de cesser de fumer?
  • la réponse, c'est maintenant plus clair?

InformationsquelleAutor java_geek | 2010-02-16