我通过main方法启动了两个线程A、B,这两个线程都是独立的,互相不干扰,几乎在线程的所有可能出异常的地方都try-catch,而且是捕捉的Throwable,但是运行一段时间后,线程B好像就不执行了,而且没有发现任何异常。
A、B两个线程都是永不停止的任务,请问有什么办法能监控一下线程B,看看是什么原因导致线程B挂掉了。

解决方案 »

  1.   

    jconsole.exe  在你安装的JDK的bin目录下使用很简单的
      

  2.   

    线程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的信息了。
      

  3.   

    java.lang.UncaughtExceptionHandler
    看下这个接口的用法,如果真的有异常,可以捕获到的。
      

  4.   

    刚刚的代码写错了,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);
    }
    }
      

  5.   

    用system.out先看看
    用log说不定有延迟
      

  6.   


    我现在给每个线程都加上UncaughtExceptionHandler,看看是不是有别的地方没有捕捉到异常。