当您仅获得线程ID时,如何中断或停止线程?比如,线程ID的格式很长。
答案 0 :(得分:0)
从Thread.enumerate和Thread.activeCount
开始Thread findThreadById(long id) {
Thread [] threads = new Thread[Thread.activeCount() * 2];
int count = Thread.enumerate(threads);
for (int i = 0; i < count; i++) {
if (threads[i].getId() == id) {
return threads[i];
}
}
return null;
}
上面的Thread.activeCount()加倍是为了捕获在调用Thread.activeCount和Thread.enumerate之间线程数增加的情况。它可能需要也可能不需要,但除了几个字节的内存外,不应该花费太多。
所以不是你有你想要的Thread实例,只需要调用Thread.interrupt。
注意 - 线程的硬停止和终止是不好的形式。根据某种条件(由另一个线程设置)找到使线程自行退出的方法要好得多。
答案 1 :(得分:0)
通过线程的合作,使用它提供的任何方法。如果没有线程的合作,你就不能。在没有合作的情况下中断或停止线程会破坏该过程。 (假设线程持有另一个线程需要的锁,或者打破了它即将恢复的不变量。)
这个问题往往来自于思考线程和流程的糟糕方式。线程合作以完成工作。任何时候你觉得你需要从外部“到达”一个线程来“做”它做正确的事情,这应该是一个警告,你首先编写错误的线程。编写线程来做什么,只做你希望它做什么。然后你不必打断或停止它。
如果由于某种原因不可能,那么在该线程的代码中设计中断或停止它的能力。