我正在尝试的代码
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;
}
}
但是我无法停止该线程。
这些天杀死线程的正确方法就是使用interrupt()
它。这集Thread.isInterrupted()
真和原因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()
重新启动线程。
问题内容: 我正在用Java开发多线程游戏。我有几个工作线程,它们从中央线程管理器中获取模块,然后由它自己执行。现在,我希望能够暂停这样的线程,如果它暂时没有任何执行。我试过从线程管理器上调用wait()方法,但这只会导致它忽略紧随其后的notify()调用。 我也在谷歌上搜索了一下,只是发现大多数站点都引用了suspend(),pause()等函数,这些函数现在在java文档页面上已被标记为已弃
问题内容: 与此问题相关,我有以下代码可订阅redispubsub队列,并使用__init__中提供的处理程序将消息提供给处理它们的类: 在上面的链接问题中,请注意,如果断开连接,则永不返回。因此,尽管我的函数可以被调用,但它实际上不会导致线程终止,因为它挂在对线程内部的调用上。 链接问题的可接受答案提到了黑客入侵redis-py的连接池。我真的不想这样做,并且有一个分支版本的redis- py(
问题内容: 我有一个固定的线程池,我可以将任务提交给该线程池(限制为 5个 线程)。如何找出这 5个 线程中的哪一个执行我的任务(例如“第3 个 线程中的第3 个 线程正在执行此任务”)? 问题答案: 使用:
当为
问题内容: 我想使用它的ID终止线程。 使用下面的语句我得到线程。我正在维护的该线程ID ,但是每当使用要终止该线程时,我就有可能使用线程ID终止。 我该如何实现? 问题答案: 你可以这样
问题内容: 我有一个简单的JavaFX 2应用程序,带有2个按钮,分别是“开始”和“停止”。单击开始按钮后,我想创建一个后台线程,该线程将进行一些处理并随着时间的推移更新UI(例如进度条)。如果单击停止按钮,我希望线程终止。 我尝试使用从文档中收集的类来完成此操作。但是,每当我单击“开始”时,UI就会冻结/挂起,而不是保持正常。 她是来自主类的用于显示按钮的代码: 这是类的代码: 相当简单,但是每