Je voudrais arrêter un thread en cours d'exécution. De la lecture, je suis d'avis que je devrais vérifier une variable locale pour déterminer si le thread doit continuer ou nettoyer et quitter run(). Des idées de mise en œuvre propre?Quelle est la meilleure façon d'arrêter un thread dans Java?
Répondre
Souvent, un moyen de le faire est de créer une variable membre volatile booléenne, peut-être appelée "stopThread". Le thread interroge périodiquement cette variable pour voir si elle devrait se terminer.
Vous pouvez utiliser la méthode interrupt. Vous pourriez faire un peu de nettoyage avant de quitter le fil. Un simple tutoriel est
La méthode d'interruption n'est pas suffisante. Par exemple, si un thread envoie un fichier via FTP (4 Go), l'interruption d'un autre thread ne fait rien tant que le thread ne bloque pas. – NullPointer0x00
Vous pouvez utiliser isInterrupted() ou interrompu() (réinitialise le drapeau d'état) pour voir s'il est interrompu. Peut-être qu'un hybride des deux approches est nécessaire dans certains scénarios. – codeplay
@ NullPointer0x00 l'opération de longue durée sera un problème à la fois pour l'interruption et la variable booléenne. Une combinaison des deux approches peut être mieux à attirer l'attention du fil. Bien sûr, cela dépend de ce que le thread est censé faire. –
- 1. Quelle est la meilleure façon de réaliser ce comportement de thread/événement en Java?
- 2. Quelle est la meilleure façon de faire ce programme Java?
- 3. Quelle est la meilleure façon d'exécuter un processus continu dans son propre thread?
- 4. Quelle est la meilleure façon d'apprendre Java EE pratiquement?
- 5. quelle est la meilleure façon de fusionner pdfs en java
- 6. Meilleure façon d'identifier et d'éliminer le thread verrouillé dans Java
- 7. Quelle est la meilleure façon d'implémenter un sondage dans Joomla?
- 8. Quelle est la meilleure façon d'écrire dans un fichier Ruby?
- 9. Quelle est la meilleure façon d'incrémenter un Java.sql.date/time?
- 10. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 11. Quelle est la meilleure façon d'exécuter `sum_by_sql`?
- 12. Quelle est la meilleure façon d'implémenter hashCode()?
- 13. Quelle est la meilleure façon d'apprendre CUDA?
- 14. Quelle est la meilleure façon d'apprendre WCF?
- 15. Quelle est la meilleure façon d'implémenter des conversations à thread comme le mur Facebook dans .NET?
- 16. Quelle est la meilleure façon de structurer un projet?
- 17. Quelle est la meilleure façon de déboguer un Oracle SP?
- 18. quelle est la meilleure façon de marquer un texte?
- 19. Quelle est la meilleure façon de déboguer un écrasement explorer.exe?
- 20. Quelle est la meilleure façon d'implémenter un contrôleur en PHP?
- 21. Quelle est la meilleure façon d'implémenter un ByteBuffer de type Java dans Obj-C?
- 22. Quelle est la meilleure façon d'analyser un e-mail SMS?
- 23. Quelle est la meilleure façon de chiffrer un clob?
- 24. Quelle est la meilleure façon d'enregistrer un RichTextFile en C#?
- 25. quelle est la meilleure façon de créer un menu javascript?
- 26. Quelle est la meilleure façon d'avoir un Comparer générique
- 27. Quelle est la meilleure façon de rafraîchir un indice Nutch?
- 28. Quelle est la meilleure façon de localiser un IEnumerable?
- 29. Quelle est la meilleure façon d'effacer un tableau de chaînes?
- 30. Quelle est la meilleure façon de vider un répertoire?
Merci, c'est ce que je pense que je vais faire. J'ai fait une variable booléenne appelée 'resume'. J'aime 'stopThread', je vais devoir m'assurer que je nettoie correctement. – NullPointer0x00
Il est important de noter le mot clé "volatile" mentionné dans la réponse. Sans cela, il n'y a aucune garantie que toute modification de la valeur du booléen soit visible par le thread en question. –