如何监控子线程的运行状态?

ivan_070 2012-12-18 09:23:52
我通过main方法启动了两个线程A、B,这两个线程都是独立的,互相不干扰,几乎在线程的所有可能出异常的地方都try-catch,而且是捕捉的Throwable,但是运行一段时间后,线程B好像就不执行了,而且没有发现任何异常。
A、B两个线程都是永不停止的任务,请问有什么办法能监控一下线程B,看看是什么原因导致线程B挂掉了。
...全文
417 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivan_070 2012-12-18
  • 打赏
  • 举报
回复
引用 4 楼 qunhao 的回复:
java.lang.UncaughtExceptionHandler 看下这个接口的用法,如果真的有异常,可以捕获到的。
我现在给每个线程都加上UncaughtExceptionHandler,看看是不是有别的地方没有捕捉到异常。
ivan_070 2012-12-18
  • 打赏
  • 举报
回复
引用 1 楼 abstruct 的回复:
jconsole.exe 在你安装的JDK的bin目录下使用很简单的
我重启线程了,如果再出问题就用这个工具看一下。
aotian16 2012-12-18
  • 打赏
  • 举报
回复
用system.out先看看 用log说不定有延迟
ivan_070 2012-12-18
  • 打赏
  • 举报
回复
刚刚的代码写错了,run函数是这样的:

	public void run() {
		while (true) {
			
			try{
				go();
			}catch(Throwable t){
				Log4j.errorLogger.error("主线程出错!\r\n"+ Tool.getStackTraceAsString(t));
			}
			
			Log4j.debugLogger.debug("休息" + Constant.THREAD_REST);
			Tool.rest(Constant.THREAD_REST);
		}
	}
qunhao 2012-12-18
  • 打赏
  • 举报
回复
java.lang.UncaughtExceptionHandler 看下这个接口的用法,如果真的有异常,可以捕获到的。
snow-is-my-Love 2012-12-18
  • 打赏
  • 举报
回复
怎么现在的问题都这么纠结呢 5-7个小时,真没有测试环境, 方不方便 把 go()的代码贴出来看看有没有逻辑问题呗
ivan_070 2012-12-18
  • 打赏
  • 举报
回复
线程B的基本代码如下:

public void run() {

try{
go();
}catch(Throwable t){
Log4j.errorLogger.error("主线程出错!\r\n"+ Tool.getStackTraceAsString(t));
}

Tool.rest(Constant.THREAD_REST);

}
在方法go里面有debug,记录了线程了执行的状态,差不多执行了5-7个小时的时候,debug中就没有线程B的信息了。
安特矮油 2012-12-18
  • 打赏
  • 举报
回复
jconsole.exe 在你安装的JDK的bin目录下使用很简单的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧