2014-09-04 91 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

隨着線程的合作,使用它提供的任何方法。沒有線程的合作,你不能。在沒有合作的情況下中斷或停止線程會破壞該進程。 (假設線程擁有另一個線程需要的鎖定或打破了即將恢復的不變量)。

此問題傾向於來自對線程和進程的糟糕思考方式。主題合作完成工作。任何時候,如果你覺得你需要「從外部進入」某個線程來「製造」它做的是正確的事情,那應該是一個警告,你首先把線編碼錯了。編碼線程去做什麼,只做什麼,你想要做什麼。那麼你不必中斷或停止它。

如果由於某種原因這是不可能的,那麼設計到該線程的代碼中斷或停止它的能力。