2013-07-01 2 views
0

일요일 오전 12:01에 매주 일요일에 기능을 반복적으로 실행하면서 작동 중지/중지 시간 동안 최소 CPU를 사용합니까? Thread.sleep()?Java : 매주 일요일 오전 12:01에 반복적으로 기능을 실행하려면 어떻게해야합니까?

+0

중복 가능성 [자바에서주기적인 간격으로 작업을 수행하는 방법?] (http://stackoverflow.com/questions/17397259/how-to-do-an-action-in-periodic-intervals -in-java) – kosa

+0

cron 사용 http://stackoverflow.com/questions/7855666/cron-job-for-a-java-program – sunrize920

+1

사용 http://www.quartz-scheduler.org/ –

답변

0

스프링 프레임 워크의 @Scheduled 주석을 사용하십시오. 오전 12시 1 분 매주 일요일 크론 식입니다 : 공공 무효 해봐요() {일주일에 한 번 실행 // 뭔가} 1 0 * * 0

@Scheduled (= "1 0 * * 0"크론)

0
import java.util.Calendar; 
import java.util.Date; 
import java.util.Locale; 
import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 
import java.util.concurrent.TimeUnit; 

class SundayRunner implements Runnable 
{ 

    private final Runnable target; 

    private final ScheduledExecutorService worker; 

    private volatile Date now; 

    SundayRunner(Runnable target, ScheduledExecutorService worker) { 
    this.target = target; 
    this.worker = worker; 
    } 

    @Override 
    public final void run() 
    { 
    if (now == null) 
     now = new Date(); 
    else 
     target.run(); 
    Date next = next(now); 
    long delay = next.getTime() - now.getTime(); 
    now = next; 
    worker.schedule(this, delay, TimeUnit.MILLISECONDS); 
    } 

    Date next(Date now) 
    { 
    Calendar cal = Calendar.getInstance(Locale.US); 
    cal.setTime(now); 
    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 1); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    Date sunday; 
    for (sunday = cal.getTime(); sunday.before(now); sunday = cal.getTime()) 
     cal.add(Calendar.DATE, 7); 
    return sunday; 
    } 

    public static void main(String... argv) 
    { 
    ScheduledExecutorService worker = 
     Executors.newSingleThreadScheduledExecutor(); 
    Runnable job = new Runnable() { 
     @Override 
     public void run() 
     { 
     System.out.printf("The time is now %tc.%n", new Date()); 
     } 
    }; 
    worker.submit(new SundayRunner(job, worker)); 
    } 

} 
관련 문제