2017-02-13 2 views
-2

Le programme que je crée nécessite un tableau d'objets thread. Plus précisément, j'ai une classe qui étend Thread. Je fais ceci pour que chaque nouvel objet créé tourne sur son propre thread. Si je veux tuer le thread et l'enlever de l'élément de tableau, afin que je puisse créer un nouvel objet de Thread dans cet espace, comment je fais ceci? C'est ma pensée. Je comprends que la suppression de la référence au fil n'arrêtera pas réellement le filetage. Pour ce faire, je dois d'abord interrompre le fil. Pour supprimer l'objet thread du tableau, puis-je le rendre simplement nul? I.e. .:Comment supprimer un objet Thread d'un tableau?

array[i].interrupt();  
array[i] = null; 

Et je serais en mesure de créer un nouveau fil dans cet espace?

array[i] = new Thread(); 

On suppose que la méthode d'exécution des interruptions gère les objets de discussion correctement etc.

+0

Qu'est-ce qui vous empêche d'essayer? Interrompre n'est pas la même chose que de s'arrêter. – f1sh

+0

Cela devrait fonctionner, mais pour vous assurer que le thread est arrêté avant d'en créer un nouveau, vous pouvez utiliser array [i] .join() avant de définir l'élément sur null. –

+0

Pouvez-vous partager vos besoins, pourquoi avez-vous besoin d'un tableau d'objets thread? – marknorkin

Répondre

0

Pour supprimer l'objet thread à partir du tableau, puis-je simplement null

Oui. Cela devrait rendre la référence maintenue à la position i pour indiquer null. Toutefois, si vous définissez l'élément à la position d'index i à null et que vous indiquez immédiatement array[i] = new Thread();, vous pouvez ignorer l'étape où vous l'avez défini sur null et utiliser uniquement array[i] = new Thread(); à la place.

Notez également que l'ajout de l'élément au tableau ne démarre pas le Thread nouvellement inséré. Vous devez toujours appeler array[i].start() après avoir inséré le nouveau Thread dans le tableau pour démarrer le nouveau Thread. Cela dit, s'étendre de Thread n'a de sens que si vous prévoyez de remplacer certaines fonctionnalités de la classe Thread. (Personnellement, je ne vois aucun cas d'utilisation valable pour cela). Vous devez à la place implémenter Runnable et le transmettre au constructeur Thread.