- 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

+ Recent posts