자바 타이머
‘타이머’는 사용자가 향후 이벤트를 예약 할 수 있도록 자바 프로그래밍 언어로 제공되는 서비스입니다. 이러한 향후 이벤트는 한 번만 발생하거나 일정한 시간 간격으로 반복 될 수 있습니다. 향후 이벤트를 시작하는 데 사용하는 트리거가있을 수 있습니다.
Java에서Timer
를 사용하여 일회성 작업 예약
import java.util.Timer;
import java.util.TimerTask;
public class StopWatch {
Timer timer;
public StopWatch(int seconds) {
timer = new Timer();
timer.schedule(new StopTask(), seconds * 1000);
}
public static void main(String[] args) {
new StopWatch(10);
System.out.println("StopWatch Started.");
}
class StopTask extends TimerTask {
public void run() {
System.out.println("Time Up!");
timer.cancel();
}
}
}
위의 코드 블록에서StopWatch
클래스라는 공개 클래스를 생성했습니다. 그것은 몇 초 안에 시간이 걸리는 공개 생성자를 가지고 있습니다. 생성자 블록에서 타이머 인스턴스가 생성됩니다. 타이머 인스턴스를 통해schedule
메소드가 호출됩니다. 이 메서드 작업은 지정된 시간에 특정 이벤트를 예약하는 것입니다. 두 개의 매개 변수TimerTask
인스턴스와 지연이 필요합니다. 밀리 초 단위로 지연을 정의합니다. 이 메서드는 정의 된 지정된 지연이 유효하지 않은 경우IllegalArgumentException
을, 제공된 작업이 이미 예약되었거나 취소 된 경우IllegalArgumentException
을 발생시킵니다. 또한 제공된 태스크 인스턴스가 널인 경우NullPointerException
이 발생합니다.
생성자 바로 아래에 실제 실행이 시작되는main
메소드가 있습니다. 정의 된 지연을 사용하여StopWatch
클래스의 새 인스턴스를 생성하고 생성자 블록의 명령문을 내부적으로 실행합니다.
main
메소드 아래에TimerTask
추상 클래스를 확장하는StopTask
라는 내부 클래스가 정의됩니다. TimerTask
는run
메소드라는 추상 메소드가있는 추상 클래스입니다. 메소드는StopTask
클래스에서 재정의되어야하며 재정의되지 않은 경우 클래스 자체가 추상이되어야합니다. 이제run
메소드에서cancel
메소드로 타이머를 중지했습니다. 이 메서드는 현재 예약 된 모든 작업을 삭제하고 타이머 작업을 종료합니다.
아래는 위 코드 블록의 출력입니다. 두 번째 줄은 schedule 메서드에서 지연이 발생하면 인쇄됩니다.
StopWatch Started.
Time Up!
Java에서 반복 타이머 예약
위의 코드를 수정하여 반복 타이머를 만듭니다. 반복 타이머는 일정한 시간 간격으로 반복적으로 실행됩니다.
아래 코드 블록에서Timer
인스턴스를 생성했습니다. 인스턴스 변수 사용은 향후 이벤트를 예약하는scheduleAtFixedRate
메소드를 호출하는 것입니다. 이 방법에는 다양한 구현이 있습니다. 우리가 사용한 것은 세 가지 매개 변수를 취합니다. 첫째,TimerTask
인스턴스는 앞으로 수행 할 작업과 관련된 명령문을 보유합니다. 다음으로delay
변수는 작업 또는 이벤트가 실행되는 데 걸리는 시간을 정의합니다. 마지막은 이벤트의 연속 호출 사이의 시간을 정의하는period
입니다. 이 메소드는 NullPointerException IllegalArgument
및IllegalState
예외를 포함하는 예외를 발생시킵니다.
import java.util.Timer;
import java.util.TimerTask;
public class RepeatedTimer {
public static void main(String[] args) {
Timer timer = new Timer();
System.out.println("Stop Watch Started.");
timer.scheduleAtFixedRate(new RepeatedTask(), 500, 1000);
}
static class RepeatedTask extends TimerTask {
public void run() {
System.out.println("Running!");
}
}
}
다음은 예정된 미래 이벤트의 끝없는 결과입니다.
Running!
Running!
Running!
Running!
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn