我正在尝试的代码
public void killJob(String thread_id)throws RemoteException{
Thread t1 = new Thread(a);
t1.suspend();
}
我们如何根据其ID暂停/暂停线程? 不推荐使用Thread.suspend,必须有一些替代方法来实现这一点。 我有线程ID我想暂停并杀死线程。
编辑:我用过这个。
AcQueryExecutor a=new AcQueryExecutor(thread_id_id);
Thread t1 = new Thread(a);
t1.interrupt();
while (t1.isInterrupted()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
t1.interrupt();
return;
}
}
但我无法阻止这个帖子。
答案 0 :(得分:6)
这些天杀死一个主题的正确方法是interrupt()
它。这会将Thread.isInterrupted()
设置为true并导致wait()
,sleep()
和其他一些方法抛出InterruptedException
。
在你的线程代码中,你应该做以下的事情,检查以确保它没有被中断。
// run our thread while we have not been interrupted
while (!Thread.currentThread().isInterrupted()) {
// do your thread processing code ...
}
以下是如何处理线程内部中断异常的示例:
try {
Thread.sleep(...);
} catch (InterruptedException e) {
// always good practice because catching the exception clears the flag
Thread.currentThread().interrupt();
// most likely we should stop the thread if we are interrupted
return;
}
暂停线程的正确方法有点困难。您可以为它要注意的线程设置某种volatile boolean suspended
标志。然后,您可以使用wait()
和notify()
启动线程再次运行。
答案 1 :(得分:0)
我最近发布了PauseableThread实施,内部使用了ReadWriteLock
。使用其中一个或一个变体,你应该能够暂停你的线程。
至于通过id暂停它们,有点谷歌搜索建议a way to iterate over all threads看起来应该有效。 Thread
已暂时使用getId方法。
杀死线程是不同的。 @Gray整齐地覆盖了那个。