2011-01-08 4 views
0

3 가지 스레드를 통해 메서드 호출을 반복하려고합니다. 내 루프의 다음 반복 동안 내 스레드를 시작한 후, 그들은 모두 아무것도 실행되지 않습니다 그래서 종료됩니다 ... 코드는 다음과 같다 : 내 스레드가 종료되는 이유는 무엇입니까?

public static void main(String[] args) { 
    main = new Main(); 
    pollingThread.start(); 
} 
static Thread pollingThread = new Thread() { 
    @Override 
    public void run() { 
     while (isRunning) { 
      main.poll(); 
       // test the state of the threads 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
}; 

public void poll() { 
    if (clientThread == null) { 
     clientThread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       //create some objects 
      } 
     }); 
     clientThread.start(); 
    }  
    else if (clientThread.isAlive()) { 
     // do some treatment 
    } 

    if (gestionnaireThread == null) { 
     gestionnaireThread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       //create some objects 
      }; 
     }); 
     gestionnaireThread.start(); 
    } 

    else if (gestionnaireThread.isAlive()) { 
     // do some treatment 
    } 

    if (marchandThread == null) { 
     marchandThread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       // create some objects 
      }; 
     }); 
     marchandThread.start(); 
    } 

    else if (marchandThread.isAlive()) { 
     // do some treatment 
    } 
} 

그리고 어떤 이유로

, 나는 상태를 테스트 할 때 내 다른 스레드의, 그들은 runnable로 나타나고 두 번째 반복, 그들은 모두 종료됩니다 ... 내가 뭘 잘못하고있어? 실제로 오류가 없지만 스레드가 종료되어 루프가 반복되어 스레드가 종료된다는 메시지가 표시됩니다.

답변

2

설명이 정확하지 않은 경우 run() 메서드 내부에 무엇이 있는지 모르지만 , 당신이 무언가를 만들고 리턴한다면, 스레드는 아마도 빨리 종결 될 것입니다. run()에서 리턴하면 스레드가 종료됩니다. 보통 스레드가 오래 동안 살아 있기를 바란다면 종료 조건을 테스트하는 동안 while 루프를 사용할 수 있습니다.

+0

실제로 이것은 많은 도움이됩니다. 이제 스레드가 아닌 다른 문제가 생겼습니다. 빠른 답변 주셔서 감사합니다. – Sephy

관련 문제