- scheduleAtFixedRate(command, initialDelay, period, unit)
1) initialDelay 후에 period 간격으로 command 실행
2) 어떤 이유(예 : garbage collection 또는 기타 백그라운드 활동)로 인해 실행이 지연되면 두 번 이상 실행될 수 있음
ex) scheduleAtFixedRate(command, 1, 2, TimeUnit.SECONDS) 일 때
실행시간이 12시00분00분이면 1초 후인 12시00분01초 command가 실행되고 다음은 12시00분3초, 5초, 7초 ~이다. command의 종료 여부와 관계가 없다.
- scheduleWithFixedDelay(command, initialDelay, delay, unit)
1) initialDelay 후에 delay 간격으로 command 실행
2) command가 종료된 후를 기준으로 delay 간격으로 command 실행
ex) scheduleWithFixedDelay(command, 1, 2, TimeUnit.SECONDS) 일 때
실행시간이 12시00분00분이면 1초 후인 12시00분01초 command가 실행된다. 그 후 command가 10초 후 종료되었다면 다음은 12시00분13초이다. 그 후 command가 2초 후 종료되었다면 다음은 12시00분17초이다.
import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class dailyCode { public static void main(String[] args) { final int INTERRUPTER_NUM = 20; ScheduledExecutorService timer1 = Executors.newSingleThreadScheduledExecutor(); ScheduledExecutorService timer2 = Executors.newSingleThreadScheduledExecutor(); ScheduledExecutorService[] interrupter = new ScheduledExecutorService[INTERRUPTER_NUM];
Date now = new Date(); System.out.println("First TimeStamp : " + new SimpleDateFormat("MM-dd-yyyy / hh:mm:ss").format(now) + "\n");
Runnable timeStamp1 = new Runnable() { @Override public void run() { Date now = new Date(); System.out.println("TimeStamp1 : " + new SimpleDateFormat("MM-dd-yyyy / hh:mm:ss").format(now)); } };
Runnable timeStamp2 = new Runnable() { @Override public void run() { Date now = new Date(); System.out.println("TimeStamp2 : " + new SimpleDateFormat("MM-dd-yyyy / hh:mm:ss").format(now)+ "\n"); } };
Runnable interrupt = new Runnable() { @Override public void run() { while(true){
} } };
for(int i=0; i<INTERRUPTER_NUM; i++){ interrupter[i] = Executors.newSingleThreadScheduledExecutor(); interrupter[i].execute(interrupt); } timer1.scheduleAtFixedRate(timeStamp1, 2, 10, TimeUnit.SECONDS); timer2.scheduleWithFixedDelay(timeStamp2, 2, 10, TimeUnit.SECONDS);
} } |
output exaplem
First TimeStamp : 11-18-2016 / 12:36:07 TimeStamp1 : 11-18-2016 / 12:36:09 TimeStamp2 : 11-18-2016 / 12:36:09 TimeStamp1 : 11-18-2016 / 12:36:19 TimeStamp2 : 11-18-2016 / 12:36:20 TimeStamp1 : 11-18-2016 / 12:36:29 TimeStamp2 : 11-18-2016 / 12:36:30 TimeStamp1 : 11-18-2016 / 12:36:39 TimeStamp2 : 11-18-2016 / 12:36:40 TimeStamp1 : 11-18-2016 / 12:36:49 TimeStamp2 : 11-18-2016 / 12:36:50 |
'프로그래밍 > JAVA' 카테고리의 다른 글
Hashtable and HashMap Example (0) | 2016.11.21 |
---|---|
Generics and Wildcard (0) | 2016.11.20 |
arraycopy Example (0) | 2016.11.19 |
Callback using interface (0) | 2016.11.17 |
Singleton Design Pattern (0) | 2016.11.16 |
초기화 블록 (Initialization Block) (0) | 2016.11.15 |
HashSet 예제 (0) | 2016.11.15 |