按线程名称或线程组名称终止线程-Java
如何根据实例的名称终止按线程名称或线程组名称终止线程-Java,java,multithreading,Java,Multithreading,如何根据实例的名称终止线程或线程组实例 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; } } Thread[]a=新线程[10
线程
或线程组
实例
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;
}
}
Thread[]a=新线程[1000];
int n=线程枚举(a);
对于(int i=0;i
虽然interrupt()不会终止线程,但stop()会终止线程(尽管已弃用)这取决于您所说的“terminate”是什么意思 但第一个技巧是,您必须获得要终止的所有线程的列表。使用
Thread.getThreads()
执行此操作。如果需要,可以按线程组筛选线程
现在,如何停止线程?有两种方法
stop()
方法。它已被弃用,您不应该使用它,因为它可能会导致系统进入不一致的状态。然而,如果你真的想。。。此方法仍受支持run()
方法。如果所有线程都是您的,您可以使用方法terminate()
使它们实现您自己的接口(例如terminateable
),该方法将更改标志值并导致线程退出。在这种情况下,终止线程的代码应该在线程上迭代,检查线程是否应该终止,以及它是否实现了接口terminateable
,对其进行强制转换并调用其terminate()
方法李>
你试过什么?你做了什么研究?所以不是你的研究助手。所以我们知道你为完成这项任务所做的一些努力。在我的例子中,我在服务器上运行的线程数是动态的。所以我不能保留那些参考资料。当响应服务时,所有线程挂钩都将消失。我认为使用共享变量或易失性变量来发出信号是行不通的。你怎么会这么想?我可以在会话中使用这些
Thread
引用。如果是这样,它也会分配一些内存。如果我可以使用线程组
,并且如果我可以停止该线程组
下的所有线程,这将更容易。但是像stop()、suspend()等方法在ThreadGroup
中被弃用。重要的是要知道中断线程并不会“终止”它。看:@Evgeniy:这很有帮助。谢谢中断是最好的方法,但是执行代码应该正确地支持它。