当前位置: 首页 > 面试题库 >

如何使用线程的ID挂起线程?

赖鸿羲
2023-03-14
问题内容

我正在尝试的代码

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 个 线程正在执行此任务”)? 问题答案: 使用:

  • 问题内容: 我有一个简单的JavaFX 2应用程序,带有2个按钮,分别是“开始”和“停止”。单击开始按钮后,我想创建一个后台线程,该线程将进行一些处理并随着时间的推移更新UI(例如进度条)。如果单击停止按钮,我希望线程终止。 我尝试使用从文档中收集的类来完成此操作。但是,每当我单击“开始”时,UI就会冻结/挂起,而不是保持正常。 她是来自主类的用于显示按钮的代码: 这是类的代码: 相当简单,但是每

  • 问题内容: 我想使用它的ID终止线程。 使用下面的语句我得到线程。我正在维护的该线程ID ,但是每当使用要终止该线程时,我就有可能使用线程ID终止。 我该如何实现? 问题答案: 你可以这样