2017-02-13 19 views
-2

我正在创建的程序需要一个线程对象数组。更具体地说,我有一个扩展线程的类。我这样做是为了让每个新创建的对象都在自己的线程上运行。如果我想杀死线程并将其从数组元素中移除,那么我可以在该空间中创建一个新的线程对象,那么我该怎么做?这是我的想法。如何从数组中删除线程对象?

我明白,删除对线程的引用并不会实际上停止线程。要做到这一点,我首先需要中断线程。要从数组中删除线程对象,我可以简单地将它设置为空吗? I .: .:

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

然后,我将能够在该空间中创建一个新的线程?

array[i] = new Thread(); 

假设Thread对象的run方法处理中断正常等

+0

什么阻止你尝试?中断与停止不同。 – f1sh

+0

这应该可行,但要确保线程在创建新线程之前已停止,可以在将元素设置为null之前执行array [i] .join()。 –

+0

你可以分享你的需求,为什么你需要一个线程对象数组? – marknorkin

回答

0

要从数组中删除线程对象,可我只是让它空

是。这应该使索引位置i的参考指向null。但是,如果您将索引位置i设置为null,然后立即指定array[i] = new Thread();,则可以跳过将其设置为null的步骤,而仅使用array[i] = new Thread();代替。

另请注意,仅将元素添加到数组中将不会启动新插入的Thread。在阵列中插入新的Thread以启动新的Thread后,您仍然需要拨打array[i].start()

也就是说,从Thread延伸出来只有在计划覆盖Thread类中的某些功能时才有意义。 (我个人没有看到任何有效的用例)。您应该改为执行Runnable并将其传递给Thread构造函数。