Thread.isAlive()获取线程状态.
Thread.stop()强制终止线程,不建议这样做,建议在子线程长时间处理过程中设置一个标志
当主线程将该标志设为某状态后自己退出run方法.
传递消息和设置标志原理是一样的.

解决方案 »

  1.   

    3.主进程通过调用子进程的SET方法修改要传送的信息,子进程在运行过程中不断检查该字段,如果字段改变则表示信息传到,做相应的操作!`
      

  2.   

    不同jvm中的进程通讯比较麻烦,我首先想到的好办法是jms
      

  3.   

    to eyeieye(魔之眼) 但是JMS是异步的通讯。我希望得到同步的调用。
      

  4.   

    如果是跨JVM的通讯,除了使用TCP/IP还可以使用映射文件,不过这个没做过.
      

  5.   

    我想到的一个方法是,用C++实现进程间的通讯与管理等功能。再用jni来调用。
    不然的话做进程间通讯还好办,如果要杀子进程就比较复杂了(除非在通讯协议中加上停止子进程的协议)进程间通讯最简单的办法可以是通过TCP/IP进行通讯。如果用文件映射的话,需要有更多的检查机制--这些通讯方法与java无关,但凡进程间通讯都可采用。
      

  6.   

    rmi实现步骤
    1)写一个接口,用于表达远程调用,注意你的接口要扩展Remote(空接口),每个方法要抛出RemoteException.编译成class
    2) 用rmic编译这个class, 生成stub class. 这个class在server和client端都要放
    3)实现这个接口,并实现server端的程序以装载这个实现类
    4)写客户端的调用,获得这个远程接口的实例;然后调用它。rmi布署比较难,但也比较有意思
      

  7.   

    我认为用SOCKET通讯是比较简单的办法:
    每个子进程侦听一个不同的端口,主程序通过SOCKET连接到不同端口,如果能连接上,那么子程序还活着。再发送相应命令让子进程退出或重启。
    很多服务器都是这么做的。
      

  8.   

    如果是不同JVM的进程,用SOCKET不失为一个方法,RMI太麻烦了
      

  9.   

    有简单的TCP/IP不用,干吗用别的。在java里,jvm外通讯都用TCP/IP,连Java的调试环境也用这个。
      

  10.   

    当然TCP/IP是最后的方法嘛~我只是想知道还有没有更好的办法?
      

  11.   

    不知道你是怎么启动的sub process的,如果是Runtime.exec的话,是不是可以用Process控制sub process啊?
      

  12.   

    是啊,但是没有办法传递参数的。除非socks
      

  13.   

    可以用Process.getOutputStream传参,如果你觉得这样不好的话,那只能用JNI或者SOCKET了。