如何实现线程监视呢?一共三个类 均继承了Thread
其中一个读数据 一个写数据 一个监视这两个线程是否死亡 死亡则重启这两个线程如何实现呢?

解决方案 »

  1.   

    Java中,一个死亡的线程是不能被重启的,需要重新建立。所以,你用监视的线程来建立并启动另两个线程,run()方法里是个死循环并捕捉异常,发生异常就再重建。
      

  2.   

    还有其它方法,比如用一个daemon timer来测试两个进程,用Thread里的isAlive方法。如果线程死亡,就再建立。那个daemon timer本身就是一个线程。所以和我上面说的大同小异,只是实现起来方便一些。
      

  3.   

    我太菜了 多多指教 这样写行不?import java.lang.Thread;
    public class Test{
    public static void main(String[] args){
    Mon mon = new Mon();
    mon.start();
    }
    }class Send extends Thread{

    public void run(){
    System.out.println("---send");
    }
    }class Get extends Thread{

    public void run(){
    System.out.println("---get");
    }

    }class Mon extends Thread{

    private Send send;
    private Get get;
    public Mon(){
    super();
    }
    public void run(){
    while(true){
    System.out.println("mon");
    if(send.isAlive() == false){
    send.start();
    }
    if(get.isAlive() == false){
    get.start();
    }
    }
    }
    }
      

  4.   

    差不多了,给你改一下。
    import java.lang.Thread;
    public class Test{
        public static void main(String[] args){
            Mon mon = new Mon();
            mon.start();
        }
    }class Send extends Thread{
        
        public void run(){
            System.out.println("---send");
        }    
    }class Get extends Thread{
        
        public void run(){
            System.out.println("---get");
        }    
        
    }class Mon extends Thread{
        
        private Send send;
        private Get get;
        public Mon(){
            super();
        }
        public void run(){
            send = new Send();  // 要先初始化那个进程,否则下面调用isAlive()方法时会有空指针
            get = new Get();
            
            send.start();       //启动两个进程
            get.start();
            while(true){
                if(send.isAlive() == false){
                 send = new Send();
                    send.start();   //java thread完成后,不能直接重启,要重新建立
                }
                if(get.isAlive() == false){
                 get = new Get();
                    get.start();
                }
                try {
                Thread.sleep(1000);  // 当thread停一下,把CPU时间留给其它线程。
                } catch (InterruptedException e) {
                e.printStackTrace();
                }
            }
        }    
    }