我们如何按名称终止Thread
或ThreadGroup
个实例?
答案 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()
执行此操作。如果需要,您可以按组过滤线程。
现在,如何阻止线程?有两种方式。
stop()
方法。它已被弃用,您永远不应该使用它,因为它可能导致系统进入不一致状态。但是,如果确实想要...仍然支持此方法。run()
方法的“协议”。如果所有线程都是你的,你可以让它们用方法Terminatable
实现你自己的接口(例如terminate()
),它将改变flag的值并导致线程退出。在这种情况下,终止线程的代码应该遍历线程,检查该线程是否应该终止,并且它实现了接口Terminatable
,强制转换为它并调用它的terminate()
方法。