J'utilise une piscine de fil pour ma tâche. Après avoir terminé chaque tâche, je détruisez le thread en utilisant S'il vous plaît me suggérer comment tuer le fil. P> thread.stop () code> et thread.destroy () code>. Mais après avoir exécuté ma candidature (en Eclipse) pendant environ 30 minutes. Je reçois une mémoire d'erreur liée. p>
4 Réponses :
Si vous utilisez une piscine de thread, vous ne devez pas terminer le fil pour commencer - tout le point d'une piscine de thread est de réutiliser les filets. P>
Si vous ne veux pas em> réutiliser le fil, alors démarrez simplement un nouveau fil au lieu d'utiliser une piscine de fil - et laissez simplement le fil mourir, au lieu d'appeler arrêter ou détruire. Ces méthodes sont obsolètes pour une bonne raison - elles ne devraient essentiellement pas être appelées. P>
Ce n'est pas vraiment clair comment cela entraînerait une exception hors mémoire, cependant - y a-t-il une raison pour laquelle vous vous concentrez sur le filetage comme cause probable? P>
Lorsque la tâche est terminée, le thread exécuté doit revenir. Ne rien faire. Cela prendra soin des choses. P>
Renforcer ce que @jon Skeet a dit, c'est une très mauvaise idée d'appeler le déprécié Selon le javadoc, Reportez-vous à Déprécation primitive de java Pour toute l'histoire. P> threads.stop () code> ou thread.destroy () code> méthodes. p>
thread.destroy () code> était fondamentalement dangereux et n'a jamais été mis en œuvre. L'idée originale était simplement de tuer le fil et de briser toutes ses serrures de moniteur. Si cela est arrivé au milieu de la mise à jour d'une structure de données partagée, la structure de données serait laissée dans un état indéterminé. D'autres threads en attente du fil tué pour notifier que certains objets attendraient à jamais. p>
thread.stop () code> provoque une exception à la filetage à une exception inattendue (au code qui a été touché). Il est un peu plus ordonné que tuer un fil, mais à moins que tout le fil arrêté (y compris tout ce que cela appelle) est soigneusement écrit avec enfin code> des blocs pour notifier les serveurs, restaurez des structures de données, etc. avoir le même problème. p>
Oui, très dangereux. J'ai souvent bloqué que le seul moyen sûr de tuer un fil est avec système.exit ().
En mode de débogage, les threads ne sont pas effacés par le collecteur des ordures. Essayez d'exécuter l'application au lieu d'exécuter en mode de débogage et tout devrait être bien. P>