Java 타이머, TimerTask, 예제가 있는 알림 클래스 자습서

게시 됨: 2021-02-04
Java 타이머, TimerTask, 예제가 있는 알림 클래스 자습서

java.util.Timer 는 미래의 특정 시간에 스레드가 실행되도록 예약하는 데 사용할 수 있는 유틸리티 클래스입니다. Java Timer 클래스를 사용하여 작업을 한 번만 실행하거나 정기적으로 실행하도록 예약할 수 있습니다.

java.util.TimerTask 는 Runnable 인터페이스를 구현하는 추상 클래스이며 Java Timer 클래스를 사용하여 예약할 수 있는 자체 TimerTask를 생성하려면 이 클래스를 확장해야 합니다.

Timer 클래스는 스레드로부터 안전하며 여러 스레드가 외부 동기화 없이 단일 Timer 개체를 공유할 수 있습니다. 타이머 클래스는 java.util.TaskQueue를 사용하여 주어진 규칙적인 간격으로 작업을 추가하고 언제든지 TimerTask를 실행하는 스레드는 하나만 있을 수 있습니다. 예를 들어 10초마다 실행하도록 타이머를 생성하지만 단일 스레드 실행에는 20초가 걸리는 경우 그러면 Timer 개체는 대기열에 작업을 계속 추가하고 한 스레드가 완료되자마자 대기열에 알리고 다른 스레드가 실행을 시작합니다.

자바 타이머 클래스

Timer 클래스는 Object wait 및 notify 메소드를 사용하여 작업을 예약합니다. TimerTask는 abstract class 이며 구체적인 구현을 제공하기 위해 상속합니다. TimerTask 클래스는 Runnable interfaceimplements 하므로 스레드이므로 TimerTask 구현도 스레드입니다.

매우 간단한 Timer 및 TimerTask 예제: 5 seconds 작업이 실행됩니다.

결과:

이 간단한 프로그램은 타이머 스레드가 실행할 작업을 구현하고 예약하는 다음 기본 부분을 보여줍니다.

  • TimerTask 의 사용자 지정 하위 클래스를 구현합니다. run 메서드에는 작업을 수행하는 코드가 포함되어 있습니다. 이 예에서 하위 클래스의 이름은 CrunchifyReminder입니다.
  • Timer 클래스를 인스턴스화하여 스레드를 만듭니다.
  • TimerTask 객체를 인스턴스화합니다( new CrunchifyReminder() ).
  • 실행을 위해 타이머 작업을 예약합니다.

어떻게 이 TimerTask를 반복적으로 수행할 수 있습니까?

결과:

기본적으로 프로그램은 타이머 스레드가 실행되는 동안 계속 실행됩니다. 다음 네 가지 방법으로 타이머 스레드를 종료할 수 있습니다.

  • 타이머에서 cancel 를 호출합니다. 타이머 작업의 run 방법과 같이 프로그램의 어느 곳에서나 이 작업을 수행할 수 있습니다.
  • new Timer(true) 와 같이 타이머를 생성하여 타이머의 스레드를 "데몬"으로 만듭니다. 프로그램에 남은 스레드가 데몬 스레드뿐이면 프로그램이 종료됩니다.
  • 모든 타이머의 예약된 작업 실행이 완료되면 Timer 개체에 대한 모든 참조를 제거합니다. 결국 타이머의 스레드가 종료됩니다.
  • 전체 프로그램(및 모든 해당 스레드)을 종료하는 System.exit 메서드를 호출합니다.