2012-10-08 2 views
2

이름에서 알 수 있듯이 Executor 서비스를 사용하여 데몬을 예약하는 데몬 프레임 워크가 있습니다.서비스를 종료하지 않고 ScheduledThreadPoolExecutorService의 지연을 변경하십시오.

java.util.concurrent.ScheduledThreadPoolExecutor.scheduleWithFixedDelay(Runnable 
    command, long initialDelay, long delay, TimeUnit unit) 

런타임에서, 나는 우리의 응용 프로그램을 종료하지 않고 Runnable 클래스의 두 실행 사이의 지연 시간을 변경하고 싶습니다.

가능합니까? 그렇다면 어떻게?

+0

왜이 작업을 수행 하시겠습니까? 달릴 필요가 없을 때 아무 것도 할 수 없습니까? –

+0

다른 매개 변수에 따라 일정을 변경하고 싶습니다. 오늘 저는 2 시간 간격으로 실행하고 있습니다. 내일, 매 시간마다 실행하고 싶습니다. (예를 들어 계산이 더 필요합니다. 예를 들면) – instanceOfObject

+0

그래서 매 시간마다 실행하고 매 시간마다 건너 뛰면 필요합니까? –

답변

3

나는 당신이 일정을 취소하고 다시 추가 할 필요가있는 경우 사전

의 최소 단위를 모른다.

private Future future = null; 
private long periodMS = 0; 

public void setPeriod(long periodMS) { 
    if (future != null && this.periodMS == periodMS) return; 
    if (future != null) future.cancel(false); 
    scheduledExecutorService.scheduleWithFixedDelay(task, periodMS/2, periodMS, TimeUnit.MILLI_SECONDS); 
} 

또는 작업 자체를 다시 예약 할 수 있습니다.

private long periodMS; 

public void start() { 
    scheduledExecutorService.schedule(this, periodMS, TimeUnit.MILLI_SECONDS); 
} 

public void run() { 
    try { 
     task.run(); 
    } catch(Exception e) { 
     // handle e 
    } 
    start(); 
} 

이렇게하면 마침표가 실행될 때마다 변경 될 수 있습니다.

관련 문제