2014-01-30 3 views
-1

5 초마다 내 스레드 내에서 메소드를 실행하도록 링크 할 것입니다. 수업의 개요는 다음과 같습니다.자바 스레드 내에서 타이머 실행

private static Timer timer = new Timer(); 

public class myThread implements Runnable { 

    public void run() { 

     //listens for incoming messages 
     while(true) { 

      //process queue 
      timer.schedule(new TimerTask() { 
      process_queue(); 
      }, 5*1000); 
     } 
    } 

    public static void process_queue() { 
     //processes queue 
     System.out.println("boom"); 

    } 
} 

어떤 도움을 주시면 감사하겠습니다.

+0

어떤 문제가 있습니까? –

+0

나는 들어오는 메시지를 끊임없이 경청 할 수 있어야하고, 5 초마다 db에서 큐를 처리 할 필요가있다. while 루프 내에서 타이머를 실행하는 데 문제가 있습니다. – hawx

+1

작업을 반복하여 한 번만 예약하십시오. 당신이'schedule'라고 부르는 쓰레드는 무의미합니다.'Timer'는 예약 된 작업을 위해 자체 스레드를 유지합니다. –

답변

0

그래서 여기에 코드의 문제 :

//listens for incoming messages 
while(true) { 

    //process queue 
    timer.schedule(new TimerTask() { 
    process_queue(); 
    }, 5*1000); 
} 

는 무제한 작업을 예약 할 예정이다 -이 모든 5 초 후에 실행하려고하는 작업을 산란되어 무한 루프입니다. 이 같은

시도 뭔가 :

public void run() { 

     //listens for incoming messages 
     while(true) { 
      process_queue(); 
      sleep(5000); //watch out for Exception handling (i.e. InterruptedException) 
     } 
    } 

오늘날의 소프트웨어 개발 동향에 당신이 blocking 대기 (즉, 절전() 메소드 블록을 현재의 thread)를 피하기 위해 같은 것이지만. Akka Actors보기 - http://akka.io/

또한 5 초마다 방법을 실행하고 싶다고 말하면서 need to be able to constantly listen for incoming messages입니다. 명확히 해 주시겠습니까? 환호

관련 문제