타이머는 자바 스레드처럼 일종의 스레드 클래스 입니다.
하지만 스레드는 하나부터 열까지 우리가 다루어야 했다면 타이머는 사용자가 사용하기 편리하도록 편의성을 제공하는 클래스 입니다.
1. Timer/TimerTask
import java.util.Timer;
import java.util.TimerTask;
public class TimerTaskExample {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask timertask = new TimerTask(){
@Override
public void run() {
System.out.println("Hello, world!");
}
}
// 1초 후에 timertask 한 번 실행
timer.schedule(new timertask(), 1000);
}
}
가장 심플한 예제 코드를 구현해 보았습니다.
위 예제는 1초뒤에 "Hello, world!"라는 문자를 한번 실행합니다
우선은 두개의 클래스의 객체를 생성해 주어야 합니다.
"Timer"클래스와 "TimerTask"클래스 입니다.
"Timer"클래스가 바로 실제 타이머의 기능을 수행하는 클래스입니다.
그리고 "TimerTask" 클래스는 "Timer" 클래스가 수행되야할 내용을 작성하는 클래스입니다.
작성될 내용은 "TimerTask"클래스의 "run"메소드에 오버라이드(메소드 재정의)를 통하여 작성하도록 되어 있습니다.
"schedule"메소드가 바로 타이머를 작동시키는 메소드 입니다.
"schedule"메소드는 두가지 경우가 있는데 단발성실행과 연발성실행이 있습니다.
//단발성
public void schedule(TimerTask task, long delay)
//연발성
public void schedule(TimerTask task, long delay, long period)
두개의 "schedule"메소드 원형입니다.
1번이 단발성, 2번이 연발성 메소드 입니다.
구별법은 연발성 메소드의 매개변수가 하나 더 있습니다. 바로 "period"로 반복주기를 더 입력해 주어야 합니다.
"task"는 "run"메소드가 작성된 "TimerTask" 객체를 담아주면 되고,
"delay"는 최초 시작 딜레이 입니다. 즉, 타이머가 시작되기전에 대기하는 시간입니다.
"delay"에 1000값을 넘긴다면 타이머는 1초뒤에 실행되겠고, 5000값을 넘긴다면 타이머는 5초뒤에 실행됩니다. (단위는 밀리세컨드[ms])
반복주기가 없는 단발성 타이머는 "run"부분이 한번만 실행되고 종료가 됩니다.
2. 연발성 타이머와 타이머 종료
연발성 타이머는 말그대로 "schedule"메소드의 반복주기 간격으로 "run"메소드를 실행시켜줍니다.
import java.util.Timer;
import java.util.TimerTask;
public class TimerTaskExample {
puvlic static int count;
public static void main(String[] args) {
count = 0;
Timer timer = new Timer();
TimerTask timertask = new TimerTask(){
@Override
public void run() {
if(count < 5){ // 5번 출력
System.out.println("Hello, world!");
count++;
}else{
timer.cancle();
}
}
}
// 5 뒤에 문자가 찍히기 시작하며 2초간격으로 timertask 실행
timer.schedule(new timertask(),5000,2000);
}
}
반복주기가 2000이니깐 2초마다 "run"메소드가 실행이 됩니다.
하지만 반복이 된다는 것은 끝이 있어야 한다는 것이죠. 그래서 타이머에서는 "cancel"메소드를 제공해 줍니다.
이 "cancel"메소드를 실행시킨 타이머 객체는 자신이 실행중인 타이머를 중단되게 됩니다.
그래서 위 코드에서보시면 카운터가 5이상이 되면 타이머를 종료할수 있도록 "cancel"메소드를 사용한 모습입니다.
실행 결과를 확인한 결과 프로그램 실행후 5초뒤에 문자가 찍히기 시작하여 2초간격으로 5번 출력후 타이머가 종료 되는 간단한 예제 입니다.
"cancel"메소드 부분을 처리해주지 않으면 계속해서 "run"메소드를 실행했을 것입니다.
하지만 "count"변수를 따로 처리하여 5번만 출력하도록 하였습니다.
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 자바 파일 권한 변경 방법 (0) | 2024.07.30 |
---|---|
[Java] 기본형 매개변수, 참조형 매개변수, 참조형 반환값 (1) | 2024.06.10 |
[JAVA] 비어있는 문자열(String) 체크하는 방법 (0) | 2024.04.24 |
[JAVA] e.printStackTrace to String (0) | 2024.02.21 |
[JAVA] 소켓 개념과 자바 예제 코드 (0) | 2023.12.12 |