java中如何找出谁创建了线程?

2023-11-23

在tomcat中,如果web应用程序确实停止了非守护线程,则tomcat无法通过shutdown.sh关闭

例如:

public class demo implements ServletContextListener{

  public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    // yes,we can cancel timer in here,but this is not the major problem
   }

  public void contextInitialized(ServletContextEvent arg0) {        
    Timer timer = new Timer();
    timer.schedule(new Test(), 1000, 1000*10);
    }
}

public class Test extends TimerTask{  
@Override
public void run() {
    System.out.println("AAAA");        
   }
}

如上,tomcat 无法通过 shutdown.sh 关闭。 来自 VisualVM,线程检查器说:

"Timer-0" - Thread t@40
   java.lang.Thread.State: TIMED_WAITING
    at java.lang.Object.wait(Native Method)
    - waiting on <3957edeb> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:552)
    at java.util.TimerThread.run(Timer.java:505)

   Locked ownable synchronizers:
    - None

堆栈信息没有指出哪个java类创建了线程, 我的问题是如何找出谁从许多网络应用程序中创建了该线程。

Thanks!


以下是方法列表,从最快/最可靠到最慢/最难排序:

  1. 如果您有该类的源代码,请在构造函数中创建一个异常(而不实际抛出它)。当您需要知道线程何时创建时,您可以简单地检查或打印它。

  2. 如果您没有源代码,线程名称可以很好地提示创建它的人。

  3. 如果名称暗示通用服务(例如java.util.Timer),然后您可以在 IDE 的构造函数中创建条件断点。条件应该是线程名称;当有人使用该名称创建线程时,调试器将停止。

  4. 如果没有太多线程,请在构造函数中设置断点Thread.

  5. 如果您有很多线程,请将调试器附加到应用程序并冻结它。然后检查堆栈跟踪。

  6. 如果其他一切都失败了,请获取Java 运行时的源代码并在您想要观察的类中添加日志记录代码,编译一个新的rt.jar并将原来的版本替换为您的版本。请不要在生产中尝试这个。

  7. 如果钱不是问题,您可以使用动态跟踪工具,例如康威APM或者,如果您使用的是 Linux 或 Solaris,您可以尝试系统点击和 dtrace 分别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中如何找出谁创建了线程? 的相关文章

  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • UIViewController 子类所需的初始值设定项

    我一直在尝试遵循有关创建容器视图控制器的教程 它是在 Objective C 中 我想将其转换为 Swift 我在这里发现了一些相同的问题 但我没有从中得到太多 这是代码 import UIKit class ContainerViewCo
  • PyQt 进度条直到 100% 才会更新或显示

    EDIT PyQt4 进度条上有许多类似的帖子没有更新 他们都关注线程问题以及程序实际更新窗口的位置 虽然很有帮助 但我的代码结构过于结构化 以至于回复不切实际 这里给出的公认答案很简单 切中要点并且有效 我在 Win 7 x64 机器上使
  • if else 概念在功能文件(Gherkin 语言)中可用吗?

    无论如何 我们可以在功能文件中使用 if else 概念吗 例如 Scenario User should be able to check login page Given I am on login page When I click
  • Chrome 中的 Azure 无限重定向循环

    我有一个 MVC5 Azure 网站 昨晚运行良好 现在 当尝试通过 chrome 登录时 它似乎陷入了无限重定向循环 它在 Edge 和 FireFox 上运行良好 它使用 Azure AD 进行身份验证 重定向从主站点到login mi
  • 在 WebAPI 控制器中序列化 EF Code First 5.0 数据时出错

    我最初问过这个问题 如何解决 指定的包含路径无效 已回答 我的 Include 现在正在工作 但是 当序列化器尝试工作时 它很神奇 我收到以下错误 You must write an attribute type object after
  • Android中使用MediaPlayer播放mp3文件列表

    我在 Android 中使用 MediaPlayer 重现多个 mp3 文件时遇到问题 我能够复制一个文件 但我没有找到任何有用的东西来逐个复制不同的文件 我现在用来重现一个文件的代码是 public MediaPlayer mediaPl
  • 使用 jquery 禁用输入 type="image" 的正确方法是什么?

    使用 jQuery 我尝试禁用这样的输入字段
  • 从两个字符串中获取编辑

    我将深入探讨我的问题 如果您不想阅读所有内容 可以跳至 TL DR 我正在尝试做什么 我需要存储一个 文件 文本文件 可以由用户编辑 如果我有原始文件 这可能是巨大的 Lorem ipsum dolor 坐 amet 用户要进行更改 Foo
  • 收集多组列

    我从一项在线调查中获得了数据 其中受访者回答了 1 3 次问题 调查软件 Qualtrics 将这些数据记录在多个列中 即调查中的 Q3 2 将包含列Q3 2 1 Q3 2 2 and Q3 2 3 df lt data frame id
  • 文本视图中的触摸坐标

    我在文本视图上使用触摸监听器 我可以通过运动事件获取触摸坐标 我可以获取我单击的字符索引或附近的字符坐标吗 Eg Hello Android 这是我的文字 现在我可以获得 x y 坐标 但是我可以获得字符索引吗 A 当我触摸它时 您必须重写
  • Rails 3.1 资产在生产中没有指纹

    刚开始适应rails 3 1 我开始编写coffeescript和sass 开发中一切正常 当我在生产中运行服务器时 我只得到 在页面的源代码中 没有生成哈希码 并且两个资产都有路由错误 Routing Error No route mat
  • C中“==”运算符的返回值

    我是否可以假设在 C 中 如果两个值相等 运算符将始终计算为 1 或者它可以计算为其他 真 值 struct ss int id struct os int sid int state int count struct ss s int s
  • 使用 ABAP 7.40+ 语法进行最有效的 itab 过滤

    在 7 40 版本中 我们有很多方法来过滤内部表数据 例如 可以使用这样的 ABAP 结构 FILTER操作员 DATA lt extract FILTER lt bseg USING KEY matnr bwtar WHERE matnr
  • 如何在node.js中保存.env文件中的更改

    I use dotenv用于读取环境变量 像这样 let dotenv require dotenv config path env console log process env DB HOST 现在我想保存更改 env文件 我找不到任何
  • 什么是非线性模式

    我正在阅读有关servant api DSL 参见 pdfhere 引用自第 5 2 节 类型安全链接 强调是我添加的 type family ElSymbol e s Symbol a Bool where ElSymbol s gt e
  • 如何使用自定义的类文件对象作为子进程 stdout/stderr?

    考虑这段代码 其中subprocess Popen被催生 我想写入子进程 stdout and stderr转到我的自定义文件对象 write 方法 但事实并非如此 import subprocess class Printer def i
  • PL/pgSQL 匿名代码块

    在 PostgreSQL 9 0 中 我有这个 PLPGSQL 匿名代码块 DO DECLARE bigobject integer BEGIN SELECT lo creat 1 INTO bigobject ALTER LARGE OB
  • Android任务亲和性的使用

    我正在阅读有关任务亲和性的内容并创建了一个具有以下活动的演示应用程序 A B gt 任务亲和力 com ando C D gt 任务亲和力 com ando E 据说 具有相同任务亲和性的活动会秘密打开另一个活动的单个实例 因此 我在每个活
  • Android 深色模式:夜间值不起作用

    我正在我的应用程序中开发日 夜功能 因此我阅读了这些文档并开始开发它 它在白天或夜间的默认值下工作正常 用精细方法AppCompatDelegate setDefaultNightMode 用于定制night我创建的主题颜色价值观之夜文件夹
  • java中如何找出谁创建了线程?

    在tomcat中 如果web应用程序确实停止了非守护线程 则tomcat无法通过shutdown sh关闭 例如 public class demo implements ServletContextListener public void