- Timer 클래스
일정한 시간 간격을 두고 어떠한 일을 수행시키고자 할 때 사용하는 클래스이다.
Timer, TimerTask 클래스
Timer객체는 일정한 시간이 되면 TimerTask 객체가 작동 된다.
단, TimerTask클래스는 추상 클래스이다. 따라서, TimerTask클래스를 상속받는 클래스를 만들어서 사용해야 한다.
import java.util.TimerTask;
public class ExTimerTask1 extends TimerTask{
@Override
public void run(){
System.out.println("ExTimerTask1 : 이곳의 작업이 실행됩니다.");
}
}
import java.util.TimerTask;
public class ExTimerTask2 extends TimerTask{
@Override
public void run(){
System.out.println("ExTimerTask2 : 이곳의 작업이 실행됩니다.");
}
}
다음은 TimerTask를 상속받는 ExTimerTask1 클래스와 ExTimerTask2 클래스이다.
TimerTask 추상클래스를 상속받게되면 꼭 재정의해서 써야하는 run() 메소드가 하나 있는데,
이것은 어떠한 일정 시간이되면, 바로 수행을 하게 될 로직이 들어가는 메소드이다.
import java.util.Timer;
public class TimerEx {
public TimerEx() throws InterruptedException {
System.out.println("^^");
Timer timer = new Timer(true);
TimerTask t1 = new ExTimerTask1(); //JVM(자바가상머신)이 컴파일 시점에 default생성자를 이용해 객체를 생성
TimerTask t2 = new ExTimerTask2();
timer.schedule(t1, 2000); // 2초후 실행
timer.schedule(t2, 10000); // 10초후 실행
Thread.sleep(11000); // 11초 동안 작업을 잠시 중단하고 다음 라인부터 계속 실행
System.out.println("**");
}
}
timer.schedule메소드를 실행할 때, 실행시킬 객체와 시간을 설정해주는데
이때 시간은 천 단위로 초를 입력한다.
Thread.sleep(11000); 을 걸어준 이유는, TimerEx객체가 실행되서 처음부터 수행하는데 로직 자체가 먼저 끝나버리는 것을 방지하기 위해 걸어주었다.
Thread에 대해서는 이후 포스팅에서 자세히 다룰 것이다.
결과는
시작과 동시 "^^" 문자열이 출력되고,
2초 후에 "ExTimerTask1 : 이곳의 작업이 실행됩니다." 문자열이 출력되고,
그로부터 8초후(합이 10초 후)에 "ExTimerTask1 : 이곳의 작업이 실행됩니다." 문자열이 출력되고,
마지막으로 그로부터 1초후(합이 11초 후)에 "**" 문자열이 출력되면서 종료된다.
Timer timer = new Timer(true); 에서 타이머 객체 생성시 "true"를 넣어준 이유는
프로그램이 실행되는 데몬이 모두 끝나면 종료시키기 위해서 넣어준 것으로,
true를 설정해 주지 않으면 로직이 다 끝난 뒤에도 타이머 객체가 계속 메모리에 상주를 하게되는 상황이 발생하게 된다.
깊이 알면 어려우므로 타이머 객체 생성시 true값을 넣어 주어야지만, 로직이 끝났을때 타이머 객체가 함께 종료된다는 것을 알아두면 된다.
'Java' 카테고리의 다른 글
자바 API 5 [InputStream,OutputStream] (0) | 2020.01.21 |
---|---|
자바 API 4 [StringTokenizer] (0) | 2020.01.20 |
자바 API 2 [Random, Math.random(), Scanner, Wrapper] (0) | 2020.01.20 |
자바 API1 [String, StringBuffer, StringBuilder, Calendar] (0) | 2020.01.19 |
배열의 정렬과 역정렬(오름차순, 내림차순)[Sort] (0) | 2019.12.27 |