通过线程名称或ThreadGroup名称终止线程 - Java

时间:2013-03-20 16:12:59

标签: java multithreading

我们如何按名称终止ThreadThreadGroup个实例?

2 个答案:

答案 0 :(得分:5)

像这样的东西

    Thread[] a = new Thread[1000];
    int n = Thread.enumerate(a);
    for (int i = 0; i < n; i++) {
        if (a[i].getName().equals(name)) {
            a[i].interrupt();
            break;
        }
    }

虽然interrupt()没有终止线程,但stop()确实(虽然已弃用)

答案 1 :(得分:3)

这取决于你说“终止”时的意思。

但首先要提示的是,您必须获取要终止的所有线程的列表。使用Thread.getThreads()执行此操作。如果需要,您可以按组过滤线程。

现在,如何阻止线程?有两种方式。

  1. 调用stop()方法。它已被弃用,您永远不应该使用它,因为它可能导致系统进入不一致状态。但是,如果确实想要...仍然支持此方法。
  2. 每个线程都应该支持关闭机制,即可以用来通知线程退出其run()方法的“协议”。如果所有线程都是你的,你可以让它们用方法Terminatable实现你自己的接口(例如terminate()),它将改变flag的值并导致线程退出。在这种情况下,终止线程的代码应该遍历线程,检查该线程是否应该终止,并且它实现了接口Terminatable,强制转换为它并调用它的terminate()方法。