Je dois trouver un moyen de retirer un thread d'un appel statique et de ne pas attendre que le thread se termine. Fondamentalement, une approche "fire and forget". Quelqu'un peut-il me fournir un exemple simple de la façon dont cela peut être accompli?Java, n'attendez pas la fin d'un thread
Répondre
Thread t = new Thread(new YourClassThatImplementsRunnable());
t.start();
// JDK 8
new Thread(() -> methodYouWantToRun()).start();
public static void foo() {
new Thread() {
public void run() {
//do something here....
}
}.start();
}
Mais si la tâche est relativement simple, utilisez le constructeur Runnable pour Thread (c'est-à-dire, nouveau Thread (nouveau Runnable() {public void run() {...}})), car de cette façon vous ne prolongez pas classe compliquée, mais implémentant une interface, ce qui devrait être plus simple dans le bytecode et vous n'aurez aucun conflit de noms avec les méthodes de Thread. – Gracenotes
commencent essentiellement le fil et à ne pas se joindre à accomplir un. Donc vous n'attendrez pas le fil pour finir.
Si c'est un fil à long terme qui a un cycle de vie similaire à votre application elle-même, et va passer beaucoup de son temps d'attente sur d'autres sujets:
new Thread(new yourLongRunningProcessThatImplementsRunnable()).start();
Si c'est une courte durée , la tâche CPU liée:
ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());
Bien que, dans la plupart des cas comme celui-ci, vous enverrez un certain nombre de tâches à ce même ExecutorService
.
Voir:
En fonction de la nature de votre tâche, de différentes manières peut être appropriée envers:
(1) Comme beaucoup l'ont dit, d'une manière commune pour une tâche occasionnelle est simplement de construire un fil et appeler son départ() méthode. (2) N'oubliez pas que si votre thread d'arrière-plan ne s'arrête pas, il empêchera par défaut votre programme de s'arrêter lorsque les autres threads seront terminés. Vous pouvez donc vouloir appeler setDaemon (true) sur le thread de sorte qu'il n'a pas ce comportement. (Dans les applications basées sur l'interface graphique, en revanche, vous finissez généralement par simplement appeler System.exit(), et idéalement, vous allez ajouter à votre tâche de longue durée une manière de fermer.)
(3) Si vous avez souvent des tâches de courte durée pour "tirer et oublier", alors pensez à utiliser le Executors framework disponible à partir de Java 5.
C'est génial, merci. – eric2323223
- 1. Exécuteurs Java: attente de la fin de la tâche.
- 2. Mettre fin un thread spécifique d'un programme multi-Threading en Java
- 3. En attente de la fin d'un minuteur en Java
- 4. Threading dans une DLL où la DLL doit retourner avant la fin du thread enfant
- 5. Comment puis-je attendre la fin d'un clip audio java?
- 6. Désactiver la réflexion Java pour le thread en cours
- 7. Java Transport.send() est-il thread-safe?
- 8. Forcer les threads dans un service à attendre la fin d'un autre thread
- 9. Problème de thread Java NIO avec SocketChannel.write()
- 10. java comment faire un thread d'expéditeur
- 11. Paramètre thread-safe d'une variable (Java)?
- 12. Java Multi problème de synchronisation de thread?
- 13. Qu'est-ce qu'un thread (Java, Android)?
- 14. Quand un thread Java atteint l'état 'Die'
- 15. expression rationnelle ne correspond pas à la fin
- 16. Comment pouvez-vous tester si un thread est le seul thread restant dans Java?
- 17. Select() ne fonctionne pas dans le thread
- 18. Log4Net FileAppender n'est pas un thread sécurisé?
- 19. La méthode Java split() supprime les chaînes vides à la fin?
- 20. crash cvs2svn avant la fin
- 21. Java regex pour supprimer tous les numéros de fin?
- 22. En attente de la fin de pthread_create sans utiliser pthread_join
- 23. Le thread PrintWriter d'une socket Java est-il sécurisé?
- 24. Retirez caractères de fin de ligne de Java chaîne
- 25. Java Preferences.app ne change pas la version java par défaut
- 26. L'initialisation statique garantit la sécurité du thread singleton? (C#)
- 27. Java: classe entièrement exécutée dans le second thread/IllegalMonitorStateException
- 28. La barre d'outils Java n'affiche pas
- 29. Manipulation d'un thread à partir d'un thread différent
- 30. Qu'est-ce que le thread du répartiteur de signaux java?
C'est essentiellement le comportement par défaut d'un thread - ce thread va-t-il avoir besoin de signaler le thread de répartition à un moment donné ou de changer l'état d'une variable partagée? Plus de détails serait bien. – Gandalf