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

如何停止通过实现可运行接口创建的线程?

司寇经亘
2023-03-14
问题内容

我通过实现可运行接口创建了类,然后在项目的其他一些类中创建了许多线程(将近10个)。
如何停止其中一些线程?


问题答案:

最简单的
办法就是interrupt()它,这将导致Thread.currentThread().isInterrupted()返回true,也可能抛出InterruptedException在某些情况下,其中线程
等待 ,例如Thread.sleep()otherThread.join()object.wait()等。

run()方法内部,您需要捕获该异常和/或定期检查该Thread.currentThread().isInterrupted()值并执行某些操作(例如,细分)。

注:虽然Thread.interrupted()看起来一样isInterrupted(),它有一个讨厌的副作用:调用interrupted()
清零interrupted标志,而呼叫isInterrupted()没有。

其他非中断方法包括使用volatile正在运行的线程监视的“停止”()标志。



 类似资料:
  • 我不明白为什么一个实现可运行接口的线程子类不强迫我覆盖run方法。基本上,当我创建实现Runnable的简单类时,它强迫我覆盖run方法。但是当我把普通类变成线程的子类时,它不再强迫我覆盖这个类了。这背后的逻辑是什么?

  • 问题内容: 我在Java中的线程上有些挣扎,我有三个线程- 线程1,线程2和线程3。那些启动时正在执行某些任务,我想通过thread1停止这两个线程。我将thread1放在,然后停止两个线程,但是两个线程的进程仍在运行。你有什么想法吗? 问题答案: 您如何试图阻止他们??警告此方法已弃用。 而是考虑对线程1使用某种标志来与线程2和3通信,它们应该停止。实际上,您可能会使用interrupts。 下

  • 问题内容: 这是执行程序类的方法: 在这里,它等待第二秒,但是当我运行代码时,它将引发异常: 我无法关闭中的并发线程破坏。这是我的代码流: 用Java执行程序类创建一个新线程来运行某些任务,即用 等待10秒以完成任务。 如果任务已完成,则可运行线程也将终止。 如果任务未在10秒内完成,则类应终止线程。 除了在最后一个场景中终止任务以外,其他所有操作都正常。我该怎么办? 问题答案: 该方法只是防止其

  • 我正在使用org.AsynchTtpClient发布异步请求。 在关闭tomcat时,我得到了以下日志: 严重:web应用程序[/test]似乎启动了一个名为[pool-1-thread-1]的线程,但未能停止它。这很有可能造成内存泄漏。 2017年7月4日10:53:00 AM org.apache.catalina.loader.webappclassloaderbase clearRefer

  • 问题内容: 你好。我有一个实现runnable的类,并且有一个List,用于存储用该类的不同对象实例化的线程。给定运行线程对象的基础对象,如何访问基础对象的属性?这是一个例子: 问题答案: 我在文档中看不到任何方法。 那么,我最好的答案是您可能应该使用而不是(或在之上)使用。或者,也许您想要某种映射结构,以便可以从线程访问Runnable。(例如,)

  • 问题内容: 我在詹金斯(Jenkins)工作。我们自己的网站通过REST API触发了此作业的构建。有时我们想中止构建。有时,甚至可能在构建开始之前。在这种情况下,我们将使用queueItem#而不是build#。 如何通过REST API做到这一点? 问题答案: 如果构建已开始,请通过以下方式进行: 将停止/取消当前构建。 如果构建尚未开始,则具有,然后打开: 这是假设您的Jenkins服务器尚