2014-09-04 93 views
-1

如果仅给出线程ID,您将如何中断或停止线程?说,线程ID是格式很长。上述基于线程ID的中断线程

+0

[This](http://stackoverflow.com/questions/7786305/stopping-a-specific-java-thread)可能会有所帮助。 – Akshay 2014-09-04 01:31:55

回答

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。

注意 - 一个线程的硬停止和终止是不好的形式。根据某种条件(由另一个线程设置)寻找让线程自行退出的方法要好得多。

0

随着线程的合作,使用它提供的任何方法。没有线程的合作,你不能。在没有合作的情况下中断或停止线程会破坏该进程。 (假设线程拥有另一个线程需要的锁定或打破了即将恢复的不变量)。

此问题倾向于来自对线程和进程的糟糕思考方式。主题合作完成工作。任何时候,如果你觉得你需要“从外部进入”某个线程来“制造”它做的是正确的事情,那应该是一个警告,你首先把线编码错了。编码线程去做什么,只做什么,你想要做什么。那么你不必中断或停止它。

如果由于某种原因这是不可能的,那么设计到该线程的代码中断或停止它的能力。