자바 타이머

Rashmi Patidar 2023년10월12일
  1. Java에서Timer를 사용하여 일회성 작업 예약
  2. Java에서 반복 타이머 예약
자바 타이머

‘타이머’는 사용자가 향후 이벤트를 예약 할 수 있도록 자바 프로그래밍 언어로 제공되는 서비스입니다. 이러한 향후 이벤트는 한 번만 발생하거나 일정한 시간 간격으로 반복 될 수 있습니다. 향후 이벤트를 시작하는 데 사용하는 트리거가있을 수 있습니다.

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라는 내부 클래스가 정의됩니다. TimerTaskrun메소드라는 추상 메소드가있는 추상 클래스입니다. 메소드는StopTask클래스에서 재정의되어야하며 재정의되지 않은 경우 클래스 자체가 추상이되어야합니다. 이제run메소드에서cancel메소드로 타이머를 중지했습니다. 이 메서드는 현재 예약 된 모든 작업을 삭제하고 타이머 작업을 종료합니다.

아래는 위 코드 블록의 출력입니다. 두 번째 줄은 schedule 메서드에서 지연이 발생하면 인쇄됩니다.

StopWatch Started.
Time Up!

Java에서 반복 타이머 예약

위의 코드를 수정하여 반복 타이머를 만듭니다. 반복 타이머는 일정한 시간 간격으로 반복적으로 실행됩니다.

아래 코드 블록에서Timer인스턴스를 생성했습니다. 인스턴스 변수 사용은 향후 이벤트를 예약하는scheduleAtFixedRate메소드를 호출하는 것입니다. 이 방법에는 다양한 구현이 있습니다. 우리가 사용한 것은 세 가지 매개 변수를 취합니다. 첫째,TimerTask인스턴스는 앞으로 수행 할 작업과 관련된 명령문을 보유합니다. 다음으로delay변수는 작업 또는 이벤트가 실행되는 데 걸리는 시간을 정의합니다. 마지막은 이벤트의 연속 호출 사이의 시간을 정의하는period입니다. 이 메소드는 NullPointerException IllegalArgumentIllegalState예외를 포함하는 예외를 발생시킵니다.

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 Patidar avatar Rashmi Patidar avatar

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

관련 문장 - Java Timer