2013-07-24 2 views
0

프로그램이 실행되기 시작한 이후 시간을 평가하는 if 문이 있으며 시간이 특정 임계 값을 초과하면 뭔가 수행합니다. 이 if 문을 프로그램이 실행되는 동안 내내 점검하고 동시에 프로그램을 계속 실행 시키길 원합니다. 이 일을 어떻게 하죠?Java : 실행 계속 if 문

감사합니다.

+3

자바 스레드를 사용하십시오. –

+0

새로운'Thread'를 생성하십시오 - 코드에 루프로'Runnable'을 전달하십시오. [동시성 학습] (http://docs.oracle.com/javase/tutorial/essential/concurrency/)을 살펴보십시오. –

+0

좋은 온라인 자습서가 있는지 확실하지 않지만 [Java Concurrency in Practice] (http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601)는 스레딩에 대해 배우기위한 멋진 책입니다. Java에서. –

답변

0

가장 쉬운 방법은 Timer을 사용하는 것입니다. 이를 통해 if 로직이 필요하지 않습니다. TimerTask을 예약 할 때 firstTime 인수를 사용할 수 있습니다.

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     // do something 
    } 
}; 
// schedule the task to be run every 100ms (0.1 sec), 
// starting after "threshold" milliseconds have past 
timer.schedule(task, threshold, 100); 

그것은 당신이 시간 임계 값이 초과 된 후 반복적으로 "무언가를"원하는 경우 설명에서 명확하지, 아니면 그냥 다음 일정 시간이 경과 할 때까지 기다려야 원하는 경우 한 번 "무언가를" . 위의 코드는 반복되는 경우입니다. 당신이 스윙을 사용하는 경우

timer.schedule(task, threshold); 

, 당신은 java.util.Timer보다는 스윙 Timer를 사용한다 : 미래의 어느 시점에서 원샷 발생의 경우, 마지막 행을 변경합니다. 자세한 내용은 How to Use Swing Timers을 참조하십시오.

편집 : 귀하의 의견은 약간의 것들을 명확히했습니다. 그것은 당신이 설명 일을 상당히 쉽게 : "무언가를"와 "다른 일을 할"수 있습니다 방법은 바깥 쪽 클래스에 호출

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 
    private final long start = System.currentTimeMillis(); 
    @Override 
    public void run() { 
     if (System.currentTimeMillis() - start < threshold) { 
      // do something 
     } else { 
      // do something else 
     } 
    } 
}; 
// schedule the task to be run every 100ms (0.1 sec), starting immediately 
timer.schedule(task, 0, 100); 

하는 것으로.

더 깨끗한 접근법은 다른 시간에 실행되도록 예약 된 여러 개의 TimerTask을 정의하는 것일 수 있습니다. 예외를 트리거하는 "다른 것"태스크는 임계 시간에 한 번 실행하도록 스케줄 될 수 있습니다. 개별 작업을 취소 할 수도 있으며 다른 작업을 취소 할 작업을 예약 할 수도 있습니다.

+0

내가 분명히하게해서 미안해. 시간이 만료 될 때까지 run() 메서드를 실행하면 프로그램이 다른 작업을 수행합니다 (예외가 발생할 가능성이 있음). 타이머를 통해이를 지정하는 방법이 있습니까? – user760220

+0

@ user760220 - 쉽게 할 수 있습니다. 나는 한 가지 접근법을 보여주기 위해 나의 대답을 확장했다. –

+0

run() 메서드를 한 번만 수행하는 방법이 있습니까? – user760220