【问题标题】:How to delete Thread object from an array?如何从数组中删除线程对象?
【发布时间】:2017-02-13 13:17:05
【问题描述】:

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

我了解删除对线程的引用实际上不会停止线程。为此,我首先需要中断线程。要从数组中删除线程对象,我可以简单地将其设为空吗?即:

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

然后我就可以在那个空间中创建一个新线程了吗?

array[i] = new Thread();

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

【问题讨论】:

  • 是什么阻止你尝试?打断不等于停下来。
  • 这应该可以,但是为了确保线程在创建新线程之前停止,您可以在将元素设置为 null 之前执行 array[i].join()。
  • 你能分享你的需求吗,为什么你需要一个线程对象数组?
  • @MauricePerry OP 将在Thread 上调用interrupt
  • @CKing 是的.....

标签: java multithreading java-threads


【解决方案1】:

要从数组中删除线程对象,我可以简单地将其设为null

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

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

也就是说,仅当您计划覆盖 Thread 类中的某些功能时,从 Thread 扩展才有意义。 (我个人没有看到任何有效的用例)。您应该改为实现 Runnable 并将其传递给 Thread 构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2023-03-03
    • 2017-03-10
    • 2023-01-30
    相关资源
    最近更新 更多