[英]Is there a way to determine when a Java thread started?
我有一个请求,要求在JVM中创建运行线程的分析,以监视长时间运行的作业。 有没有办法找到Java线程的开始日期/时间? 我没有问题获取线程,但我无法找出任何方法来找出线程已激活多久或何时启动。 为了获取线程,我只是简单地枚举ThreadGroup。
请注意,我无法控制实际的线程本身,所以我不能放入任何时间或属性并自己记录开始时间。 我只有实际的线程本身,需要从中确定数据。 我可以在线程上找到两个方法 - “getThreadCpuTime()”和“getThreadUserTime()”但我不确定这些是否足够,因为显然线程偶尔会调用sleep()方法,我担心“睡眠”时间不包括在这些方法中。
有没有办法确定线程的开始时间? 或者两种时间方法中的任何一种都会返回线程活动的时间长度?
这可能是XY问题吗?
http://www.perlmonks.org/index.pl?node_id=430320
我不知道有什么方法可以确定线程何时启动。 但我不确定这是否真的是相关信息。 您是否想要了解性能? 您是否正在寻求使用长时间运行的线程作为性能不佳的指标?
问题是线程一直被重用。 Tomcat汇集其AJP和HTTP线程。 当他们收到新请求时,线程将跳出其循环并执行某些操作,然后返回等待状态。 您想要测量该操作,而不是整个线程。
再举一个例子,垃圾收集器线程。 这将始终是一个长期运行的线程,因为它始于JVM启动时间!
虽然您可能无法扩展Thread,但您可以考虑使用面向方面编程拦截新的Runnable启动并记录此时的开始时间。
看一下AspectJ / Spring AOP
如果您能够定义自己的Thread
子类,则可以执行以下操作:
class WugThread extends Thread
{
// constructors
long timeStarted = -1;
public void start()
{
super.start();
timeStarted = System.currentTimeMillis();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.