现在我想做一个功能:监听一个线程,如果该线程死掉,就重启该线程。
请大家帮忙给出思路谢谢!

解决方案 »

  1.   

    线程死掉时,如中断,或者其它原因。
    在catch 处理代码中直接开启线程即可。
      

  2.   

    while(thread.alive)
    {}
    这样?
      

  3.   

    呵呵谢谢 Fly_m 
    但是现在要做的是要求有一个监听器来监听线程。比如说被监听的线程被阻塞了或者没有抛异常,而且我们不晓得线程怎么样了,就是线程不执行了,这个时候再重启一个线程
      

  4.   

        Java管理扩展(也叫做JMX规范)在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等(以上内容来自百度百科)
        从这个功能能介绍看来JMX似乎是用来监控系统状态和管理系统的,如果系统死掉了,就达不到效果了。
        谢谢 xuxianyue 期待更好的解决办法
      

  5.   

    首先如果你明确知道这个线程什么情况会死掉,你肯定知道怎么做。 (你会想办法不让它死)。所以死掉的情况应该是你没想到的情况,即有异常,Thread中有个方法叫做,
    public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh) { 你实现一个UncaughtExceptionHandler去重启Thread(其实是new新的)。不知道是否能实现楼主的想法。
      

  6.   

    从死亡状态变为运行状态应该不可能,
    得重新建一个新的线程,
    获得原来实现Runnable的对象
    Thread t=new Thread(对象引用)
    这样行不行。
      

  7.   

    谢谢 Mybeautiful 和 xuxianyue 
    现在又出现一种情况,就是我调用本地 DLL 文件的时候会突然死掉,而且 JVM 随即就挂了,下面是内存使用情况
    Heap
     def new generation   total 576K, used 291K [0x22ae0000, 0x22b80000, 0x22fc0000)
      eden space 512K,  56% used [0x22ae0000, 0x22b289e0, 0x22b60000)
      from space 64K,   2% used [0x22b60000, 0x22b60570, 0x22b70000)
      to   space 64K,   0% used [0x22b70000, 0x22b70000, 0x22b80000)
     tenured generation   total 1848K, used 963K [0x22fc0000, 0x2318e000, 0x26ae0000)
       the space 1848K,  52% used [0x22fc0000, 0x230b0c40, 0x230b0e00, 0x2318e000)
     compacting perm gen  total 8192K, used 2653K [0x26ae0000, 0x272e0000, 0x2aae0000)
       the space 8192K,  32% used [0x26ae0000, 0x26d77520, 0x26d77600, 0x272e0000)
        ro space 8192K,  63% used [0x2aae0000, 0x2afeb178, 0x2afeb200, 0x2b2e0000)
        rw space 12288K,  46% used [0x2b2e0000, 0x2b879fa8, 0x2b87a000, 0x2bee0000)不知道大家能够给些建议?感激不尽
      

  8.   

    哦对了补充一下,刚才调用 DLL 的时候,JVM 没有报错
      

  9.   

    dll是你写的吗?
    如果是,请确定自己写的是否正确,
    还有调用dll发生错误,一般有异常信息产生,
    请贴出异常信息。
      

  10.   

    额 DLL 不是自己写的呢,系统的
    #写报文#
    EXCEPTION_ACCESS_VIOLATION发送报文
    at pc=0x033337d9,pid=696,tid=3072
    #Java VM:Java HotSpot<TM> Client VM(1.5.0_06-b05 mixed mode, sharing)
    Provlematic frame:
    C [JCustomOpc.dll+0x637d9]
    An error report file with more information is saved as hs_err_pid696.log
    If you would like to submit a bug report, please visit:
    http://java.sun.com/webapps/bugreport/crash.jsp
      

  11.   

    从hs_err_pid696.log
    的找异常信息
      

  12.   

    调用dll出错,一般都是内存访问异常,检查你写的jni代码,或者你调用的jna代码,查看参数传递是否正确。以及参数的大小,比如数组大小等。
      

  13.   

    我也出现类似问题 :hs_err_pid696.log 如下  调用
      private native OpcGroup getDownloadGroupNative();
    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x033337d9, pid=696, tid=3072
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode, sharing)
    # Problematic frame:
    # C  [JCustomOpc.dll+0x637d9]
    #---------------  T H R E A D  ---------------Current thread (0x02d92310):  JavaThread "Thread-1" [_thread_in_native, id=3072]siginfo: ExceptionCode=0xc0000005, reading address 0xc5033337Registers:
    EAX=0x00003802, EBX=0xc5033337, ECX=0x03412837, EDX=0x0333a501
    ESP=0x0368fb40, EBP=0x0368fb70, ESI=0x02fc27d4, EDI=0x00000002
    EIP=0x033337d9, EFLAGS=0x00010217Top of Stack: (sp=0x0368fb40)
    0x0368fb40:   032d31cf 03336eb5 00000000 2308ea08
    0x0368fb50:   02d92310 02cfa890 00000000 00000000
    0x0368fb60:   02fc27d0 0341299c 034129ac 02fc27e0
    0x0368fb70:   0368fb88 00bc2140 02d923d0 0368fb90
    0x0368fb80:   ff829a18 22b10cc0 0368fc20 00bcfd4c
    0x0368fb90:   2308ea08 00000000 2308ea08 22af8870
    0x0368fba0:   6d763d90 0368fc08 6d73ce4f 6d7965e8
    0x0368fbb0:   6d67af8b 0368fc14 0368fc18 6d6aa0bf Instructions: (pc=0x033337d9)
    0x033337c9:   e0 e9 cd 21 fa ff b1 37 33 03 bb 37 33 03 c5 37
    0x033337d9:   33 03 89 37 33 03 93 37 33 03 9d 37 33 03 a7 37 
    Stack: [0x03650000,0x03690000),  sp=0x0368fb40,  free space=254k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [JCustomOpc.dll+0x637d9]
    J  javafish.clients.opc.JOpc.getDownloadGroupNative()Ljavafish/clients/opc/component/OpcGroup;
    J  javafish.clients.opc.JEasyOpc.run()V
    v  ~OSRAdapter
    j  java.lang.Thread.run()V+11
    v  ~StubRoutines::call_stub
    V  [jvm.dll+0x845a9]
    V  [jvm.dll+0xd9317]
    V  [jvm.dll+0x8447a]
    V  [jvm.dll+0x841d7]
    V  [jvm.dll+0x9ed69]
    V  [jvm.dll+0x109fe3]
    V  [jvm.dll+0x109fb1]
    C  [MSVCRT.dll+0x2a3b0]
    C  [kernel32.dll+0xb729]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    J  javafish.clients.opc.JOpc.getDownloadGroupNative()Ljavafish/clients/opc/component/OpcGroup;
    J  javafish.clients.opc.JEasyOpc.run()V
    v  ~OSRAdapter
    j  java.lang.Thread.run()V+11
    v  ~StubRoutines::call_stub---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
      0x00a95740 JavaThread "RMI LeaseChecker" daemon [_thread_blocked, id=188]
      0x00aa3200 JavaThread "RMI RenewClean-[192.168.127.17:1037]" daemon [_thread_blocked, id=4056]
      0x02d33008 JavaThread "GC Daemon" daemon [_thread_blocked, id=3800]
      0x02d19008 JavaThread "RMI Reaper" [_thread_blocked, id=3796]
      0x00ad11a8 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=3792]
      0x00a91e58 JavaThread "RMI TCP Accept-8808" daemon [_thread_in_native, id=3788]
      0x00a91b90 JavaThread "Timer-0" daemon [_thread_blocked, id=1940]
      0x00aa0e68 JavaThread "Thread-24" [_thread_blocked, id=3316]
      0x00a62c28 JavaThread "Thread-23" [_thread_in_native, id=3312]
      0x00a61ee0 JavaThread "Thread-22" [_thread_blocked, id=3308]
      0x00a61238 JavaThread "Thread-21" [_thread_blocked, id=3304]
      0x00a60590 JavaThread "Thread-20" [_thread_blocked, id=3300]
      0x00a5f9b0 JavaThread "Thread-19" [_thread_blocked, id=3296]
      0x02d30638 JavaThread "Thread-18" [_thread_blocked, id=3292]
      0x02d2fa58 JavaThread "Thread-17" [_thread_blocked, id=3288]
      0x02d66d48 JavaThread "Thread-16" [_thread_blocked, id=3284]
      0x02d8db38 JavaThread "Thread-15" [_thread_blocked, id=2632]
      0x02d8cfb0 JavaThread "Thread-14" [_thread_blocked, id=3280]
      0x02d64030 JavaThread "Thread-13" [_thread_blocked, id=3276]
      0x02e13618 JavaThread "Thread-12" [_thread_blocked, id=3272]
      0x02ef1948 JavaThread "Thread-11" [_thread_blocked, id=3268]
      0x02db0608 JavaThread "Thread-10" [_thread_blocked, id=3264]
      0x02daf9f8 JavaThread "Thread-9" [_thread_blocked, id=3260]
      0x02da2940 JavaThread "Thread-8" [_thread_blocked, id=3256]
      0x02d365d8 JavaThread "Thread-7" [_thread_blocked, id=3252]
      0x02f6e9f0 JavaThread "Thread-6" [_thread_blocked, id=3248]
      0x02f6e468 JavaThread "Thread-5" [_thread_blocked, id=3244]
      0x02d32720 JavaThread "Thread-4" [_thread_blocked, id=3240]
      0x02f9ea20 JavaThread "Thread-3" [_thread_in_native, id=3236]
    =>0x02d92310 JavaThread "Thread-1" [_thread_in_native, id=3072]
      0x00aa8310 JavaThread "Thread-2" [_thread_blocked, id=3068]
      0x02d22118 JavaThread "MySQL Statement Cancellation Timer" daemon [_thread_blocked, id=2764]
      0x00a8e150 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=456]
      0x00a8cd20 JavaThread "CompilerThread0" daemon [_thread_blocked, id=812]
      0x00a8c030 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=808]
      0x00a867f8 JavaThread "Finalizer" daemon [_thread_blocked, id=800]
      0x00a65c20 JavaThread "Reference Handler" daemon [_thread_blocked, id=796]
      0x000341a0 JavaThread "main" [_thread_blocked, id=700]Other Threads:
      0x00a85340 VMThread [id=780]
      0x00aa8bb0 WatcherThread [id=840]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
     def new generation   total 576K, used 291K [0x22ae0000, 0x22b80000, 0x22fc0000)
      eden space 512K,  56% used [0x22ae0000, 0x22b289e0, 0x22b60000)
      from space 64K,   2% used [0x22b60000, 0x22b60570, 0x22b70000)
      to   space 64K,   0% used [0x22b70000, 0x22b70000, 0x22b80000)
     tenured generation   total 1848K, used 963K [0x22fc0000, 0x2318e000, 0x26ae0000)
       the space 1848K,  52% used [0x22fc0000, 0x230b0c40, 0x230b0e00, 0x2318e000)
     compacting perm gen  total 8192K, used 2653K [0x26ae0000, 0x272e0000, 0x2aae0000)
       the space 8192K,  32% used [0x26ae0000, 0x26d77520, 0x26d77600, 0x272e0000)
        ro space 8192K,  63% used [0x2aae0000, 0x2afeb178, 0x2afeb200, 0x2b2e0000)
        rw space 12288K,  46% used [0x2b2e0000, 0x2b879fa8, 0x2b87a000, 0x2bee0000)Dynamic libraries:
    0x00400000 - 0x0040c000  C:\WINDOWS\system32\java.exe
    0x7c920000 - 0x7c9b6000  C:\WINDOWS\system32\ntdll.dll
    0x7c800000 - 0x7c91e000  C:\WINDOWS\system32\kernel32.dll
    0x77da0000 - 0x77e49000  C:\WINDOWS\system32\ADVAPI32.dll
    0x77e50000 - 0x77ee2000  C:\WINDOWS\system32\RPCRT4.dll
    0x77fc0000 - 0x77fd1000  C:\WINDOWS\system32\Secur32.dll
    0x77be0000 - 0x77c38000  C:\WINDOWS\system32\MSVCRT.dll
    0x6d670000 - 0x6d804000  C:\Java\jre1.5.0_06\bin\client\jvm.dll
    0x77d10000 - 0x77da0000  C:\WINDOWS\system32\USER32.dll
    0x77ef0000 - 0x77f39000  C:\WINDOWS\system32\GDI32.dll
    0x76b10000 - 0x76b3a000  C:\WINDOWS\system32\WINMM.dll
    0x76300000 - 0x7631d000  C:\WINDOWS\system32\IMM32.DLL
    0x62c20000 - 0x62c29000  C:\WINDOWS\system32\LPK.DLL
    0x73fa0000 - 0x7400b000  C:\WINDOWS\system32\USP10.dll
    0x6d280000 - 0x6d288000  C:\Java\jre1.5.0_06\bin\hpi.dll
    0x76bc0000 - 0x76bcb000  C:\WINDOWS\system32\PSAPI.DLL
    0x6d640000 - 0x6d64c000  C:\Java\jre1.5.0_06\bin\verify.dll
    0x6d300000 - 0x6d31d000  C:\Java\jre1.5.0_06\bin\java.dll
    0x6d660000 - 0x6d66f000  C:\Java\jre1.5.0_06\bin\zip.dll
    0x032d0000 - 0x0334c000  E:\ruanjian\软件包\JCWSYSTEM\lib\JCustomOpc.dll
    0x770f0000 - 0x7717b000  C:\WINDOWS\system32\oleaut32.dll
    0x76990000 - 0x76acd000  C:\WINDOWS\system32\ole32.dll
    0x77bd0000 - 0x77bd8000  C:\WINDOWS\system32\version.dll
    0x5d170000 - 0x5d20a000  C:\WINDOWS\system32\comctl32.dll
    0x5adc0000 - 0x5adf7000  C:\WINDOWS\system32\uxtheme.dll
    0x74680000 - 0x746cc000  C:\WINDOWS\system32\MSCTF.dll
    0x73640000 - 0x7366e000  C:\WINDOWS\system32\msctfime.ime
    0x58a00000 - 0x58a07000  C:\WINDOWS\system32\Wship6.dll
    0x71a20000 - 0x71a37000  C:\WINDOWS\system32\WS2_32.dll
    0x71a10000 - 0x71a18000  C:\WINDOWS\system32\WS2HELP.dll
    0x6d4c0000 - 0x6d4d3000  C:\Java\jre1.5.0_06\bin\net.dll
    0x719c0000 - 0x719fe000  C:\WINDOWS\System32\mswsock.dll
    0x76ef0000 - 0x76f17000  C:\WINDOWS\system32\DNSAPI.dll
    0x76d30000 - 0x76d48000  C:\WINDOWS\system32\iphlpapi.dll
    0x76f80000 - 0x76f88000  C:\WINDOWS\System32\winrnr.dll
    0x76f30000 - 0x76f5c000  C:\WINDOWS\system32\WLDAP32.dll
    0x76f90000 - 0x76f96000  C:\WINDOWS\system32\rasadhlp.dll
    0x60fd0000 - 0x61025000  C:\WINDOWS\system32\hnetcfg.dll
    0x71a00000 - 0x71a08000  C:\WINDOWS\System32\wshtcpip.dll
    0x76fa0000 - 0x7701f000  C:\WINDOWS\system32\CLBCATQ.DLL
    0x77020000 - 0x770ba000  C:\WINDOWS\system32\COMRes.dll
    0x036a0000 - 0x03be9000  C:\WINDOWS\system32\xpsp2res.dll
    0x10000000 - 0x10014000  C:\Program Files\OMRON\SYSMAC OPC Server\bin\OPCProxy.dll
    0x7c9c0000 - 0x7cc7c000  C:\WINDOWS\system32\msi.dll
    0x68000000 - 0x68036000  C:\WINDOWS\system32\rsaenh.dll
    0x759d0000 - 0x75a7f000  C:\WINDOWS\system32\USERENV.dll
    0x5fdd0000 - 0x5fe26000  C:\WINDOWS\system32\netapi32.dll
    0x6d5f0000 - 0x6d5f6000  C:\Java\jre1.5.0_06\bin\rmi.dll
    0x76d70000 - 0x76d92000  C:\WINDOWS\system32\Apphelp.dllVM Arguments:
    java_command: JCWSystem.jar
    Launcher Type: SUN_STANDARDEnvironment Variables:
    PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\DMIX;C:\Program Files\MySQL\MySQL Server 5.0\bin
    USERNAME=Administrator
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel---------------  S Y S T E M  ---------------OS: Windows XP Build 2600 Service Pack 3CPU:total 2 family 6, cmov, cx8, fxsr, mmx, sse, sse2, htMemory: 4k page, physical 2087340k(1605676k free), swap 4025848k(3613124k free)vm_info: Java HotSpot(TM) Client VM (1.5.0_06-b05) for windows-x86, built on Nov 10 2005 11:12:14 by "java_re" with MS VC++ 6.0
      

  14.   

    这种异常很有规律的 莫非阁下也遇到这种错误 jvm的bug 内存溢出 都不是我这种情况
      

  15.   

    跟  longzjklong  的一样,请大家给个解决办法 Thank
      

  16.   

    看crash应该是调用本地代码出的错,但我这边是有时出(不一定是某时) 有的电脑(系统和jdk与别的电脑都一致)出, 但也没听说过JEasyOpc不稳定啊
      

  17.   

    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C [JCustomOpc.dll+0x637d9]
    J javafish.clients.opc.JOpc.getDownloadGroupNative()Ljavafish/clients/opc/component/OpcGroup;
    J javafish.clients.opc.JEasyOpc.run()V
    v ~OSRAdapter
    j java.lang.Thread.run()V+11
    v ~StubRoutines::call_stub
    V [jvm.dll+0x845a9]
    V [jvm.dll+0xd9317]
    V [jvm.dll+0x8447a]
    V [jvm.dll+0x841d7]
    V [jvm.dll+0x9ed69]
    V [jvm.dll+0x109fe3]
    V [jvm.dll+0x109fb1]
    C [MSVCRT.dll+0x2a3b0]
    C [kernel32.dll+0xb729]
    -----------------------
    像这样 C [JCustomOpc.dll+0x637d9]
    说明本地方法在JCustomOpc.dll中,在这里有时能
    看出调用方法出错的具体信息,
    像这样的错误有并不都是内存溢出。有
    可能是其他信息比如:没有这样的方法,
    方法的参数类型和个数错误等等。
      

  18.   

    谢谢xuxianyue
    dll中有如下:
    java_javafish_clients_opc_JOpc_getDownloadGroupNative  地址为0066D30 
    我觉得应该是此dll的bug  因为他是有的电脑(不止一个)有时出(时间可以是半年),像现在我等着他出,他都不出,无语至极!!! 
      

  19.   

    线程的getstate方法能够获得线程的状态
      

  20.   

    Thank lliiqiang 现在是 JVM 线程死掉了,并且 JVM 也挂了呵呵