작업을 실행하기 위해 Spring Task Scheduler를 처음 사용하므로 기본적인 질문 일 수 있습니다. Runnable
을 구현하는 클래스 내에서 처리하고자하는 항목 목록이 있습니다. 여기 내 작업 클래스입니다 :Spring Task Scheduler 연속 작업
public class ProcessTask<T> implements Runnable {
private String item;
public ProcessTask(String item) {
System.out.println("Starting process for " + item);
this.item = item;
}
@Override
public void run() {
System.out.println("Finishing task for " + item);
}
내가 항목의 목록을 처리하려는
, 이전 작업 후 10 초부터 각각 시작했다. 이전 작업이 예약 된 후 각 작업을 10 초 실행하도록 설정할 수 있음을 이해합니다. 그러나 다른 프로세스가 작업을 10 초가 경과하기 전에 실행할 수 있으므로이 작업에 의존하고 싶지 않습니다. 십초 오프
Date end = new Date(cal.getTimeInMillis() + 10000); // this is the time that the task should be fired off, the first one being 10 seconds after the current time
for(String item : items) {
Calendar cal = Calendar.getInstance();
cal.setTime(end);
System.out.println("Next task fires at " + cal.getTime());
ProcessTask task = new ProcessTask(item);
ScheduledFuture<?> future = taskScheduler.schedule(task, end);
end = new Date(Calendar.getInstance().getTimeInMillis() + 10000);
}
첫 번째 작업의 화재 코드가 큰 인 실행 후 :
그래서 내 메인 클래스에서, 나는 다음 있습니다. 그러나 나머지 항목은 10 초를 기다리지 않고 즉시 예약됩니다. 나는 왜 그런 일이 일어나는 지 이해한다. 왜냐하면taskScheduler.schedule
은 비동기 적이기 때문에 for 루프는 계속 진행되고 나머지 아이템은 10 초 후에 스케줄링된다.
내가 같은 초 동안 메인 쓰레드의 수면을 갖고, ScheduledFuture
다음 작업을 예약하기 전에 완료되었는지 확인하려고 :
while(!future.isDone()) {
Thread.sleep(1000);
System.out.println("is future done: " + future.isDone());
}
내가 바로 위의 블록 ScheduledFuture<?> future = taskScheduler.schedule(task, end);
후이 블록을 추가하는 경우, future.isDone()
은 항상 false를 반환하고 ProcessTask
run()
메서드는 호출되지 않습니다.
ScheduledFuture
을 사용하여 이전 작업이 종료되었는지 판단 할 수있는 방법이 있습니까? 그렇지만 이전 작업이 종료 되었으면 계속 기다리시겠습니까? 이 작업을 수행하는 전반적인 더 좋은 방법이 있습니까? 미리 감사드립니다.
그래서 특정 시간부터 시작하고 다른 사람들이 10 초 후에 시작할 수 있도록 하시겠습니까? 그런 다음 달력을 사용하지 않으려면 할당을 '끝'으로 변경하고 이전 끝 값은 변경 하시겠습니까? –
@KoosGadellaa 이전 작업이 실행 된 후 각 작업이 10 초 후에 시작되도록하는 방법을 찾고 있습니다. 앞으로는 작업을 10 초 이상 완료 할 수 있도록 확장 할 예정입니다. 이런 일이 발생하면 이전에 완료 한 시점 이후 10 초 동안 다음 일정을 예약하려고하므로 예약 된 시간에 의존하고 싶지는 않지만 대신 실제로 실행 한 시간입니다. 다행히도 그것은 의미가 있습니다. – user172092
이 지점을 상세히 설명하는 게시물을 편집했습니다. – user172092