2014-04-15 7 views
1

매 초마다 작업을 실행해야하는 스레드를 시작하려고합니다.매 초마다 스레드를 깨우는 방법

// execute my task 
.. 

lastScan.setTime(lastScan.getTime() + 1000); 
long timeToSleep = (lastScan.getTime() - new Date().getTime()); 
try { 
    Thread.sleep(timeToSleep); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

이 작동하지만, 뭔가 더 우아하고, 어쩌면 더 안전이 있다면 예를 들어, 내 실 때 깨어 기능을 궁금 해서요 : 지금이 코드에 루프를 만드는에서 한 그래서 현재 날짜가 주어진 시간에 도달합니다.

미리 제안 해 주셔서 감사합니다.

+0

이는 타이머의 용도입니다. – njzk2

+1

[ScheduledExecutorService] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html) – GriffeyDog

답변

2

자바 Timer 클래스에서보세요, 이것은 당신이 더 우아 Timed 루프를 수행하는 데 도움이됩니다.

2

내가 함께 갈 것입니다 :

ScheduledThreadPoolExecutor 

Scheduled Pool

+0

문서에 대한 링크가 있습니까? –

1

당신은 타이머와 TimerTask를 사용할 수 있습니다 별도의 스레드에서 시간 초과 지연을 실행할 수있는 Runnable 객체를 전달하는 다른 방법을 가지고

ScheduledExecutorService es = Executors.newScheduledThreadPool(10); //number of threads 

, 이것은 5 초마다 동일한 행을 인쇄하는 샘플 코드입니다.

import java.util.Calendar; 
import java.util.Timer; 
import java.util.TimerTask; 

public class TimeReminder { 
    Timer timer; 

    public TimeReminder(int seconds) { 
     timer = new Timer(); //At this line a new Thread will be created 
     timer.schedule(new RemindTask(), Calendar.getInstance().getTime(), seconds * 1000); 
    } 

    class RemindTask extends TimerTask { 

     @Override 
     public void run() { 
      System.out.println("ReminderTask is completed by Java timer"); 
     } 
    } 

    public static void main(String args[]) { 

     new TimeReminder(5); 
     System.out.println("Timertask is scheduled with Java timer."); 
    } 
} 
관련 문제