Java 타임 퀘스트의 세 가지 실현 방법

3097 단어 Java정시 임무
번역자 주: 개인적으로 정시 작업으로 쓰레기 수거를 하는 것은 좋은 예가 아니라고 생각한다. 번역자가 접촉한 항목을 보면 정시 작업으로 비실시간 계산을 하고 임시 데이터, 파일 등을 제거하는 것이 비교적 흔하다.본고에서 저는 여러분에게 세 가지 다른 실현 방법을 소개할 것입니다. 1.일반thread 구현 2.TimerTask 구현 3.ScheduledExecutorService 구현
1. 일반thread
이것은 가장 흔히 볼 수 있는thread를 만들어서while 순환에서 계속 실행되도록 하고sleep 방법을 통해 정시 작업의 효과를 얻을 수 있습니다.이렇게 하면 신속하고 간단하게 실현할 수 있다. 코드는 다음과 같다

public class Task1 {
public static void main(String[] args) {
  // run in a second
  final long timeInterval = 1000;
  Runnable runnable = new Runnable() {
  public void run() {
    while (true) {
      // ------- code for task to run
      System.out.println("Hello !!");
      // ------- ends here
      try {
       Thread.sleep(timeInterval);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      }
    }
  };
  Thread thread = new Thread(runnable);
  thread.start();
  }
}
2. Timer와 TimerTask로
위의 실현은 매우 빠르고 간편하지만, 그것도 일부 기능이 부족하다.Timer와 TimerTask를 사용하면 위의 방법에 비해 다음과 같은 이점이 있습니다.
1. 작업을 시작하고 취소할 때 제어할 수 있습니다. 2.첫 번째 작업을 수행할 때 원하는 딜레이 시간을 지정할 수 있습니다.
실현할 때 Timer 클래스는 임무를 스케줄링할 수 있고, TimerTask는 run() 방법에서 구체적인 임무를 실현할 수 있다.Timer 인스턴스는 다중 작업을 스케줄링할 수 있으며 스레드가 안전합니다.Timer의 구조기가 호출되었을 때, 작업을 스케줄링할 수 있는 라인을 만들었습니다.다음은 코드:

import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
  public static void main(String[] args) {
    TimerTask task = new TimerTask() {
      @Override
      public void run() {
        // task to run goes here
        System.out.println("Hello !!!");
      }
    };
    Timer timer = new Timer();
    long delay = 0;
    long intevalPeriod = 1 * 1000;
    // schedules the task to be run in an interval
    timer.scheduleAtFixedRate(task, delay,
                                intevalPeriod);
  } // end of main
}
이런 종류는 JDK 1.3부터 존재한다.
3. ScheduledExecutor Service
ScheduledExecutorService는 Java SE 5의 java입니다.util.concurrent에서 병발 도구류로 도입된 것이 가장 이상적인 정시 임무 실현 방식이다.이전 두 가지 방법에 비해 다음과 같은 이점이 있습니다.
1. Timer의 단일 스레드에 비해 스레드 탱크를 통해 작업을 수행합니다. 2.첫 번째 임무 수행 시간을 유연하게 설정할 수 있습니다.실행 시간 간격을 설정하기 위해 좋은 약정을 제공하다
다음은 코드를 실현하는 것입니다. 우리는 ScheduledExecutor Service #schedule AtFixedRate를 통해 이 예를 보여 줍니다. 코드 안의 매개 변수 제어를 통해delay 시간을 처음으로 실행했습니다.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
  public static void main(String[] args) {
    Runnable runnable = new Runnable() {
      public void run() {
        // task to run goes here
        System.out.println("Hello !!");
      }
    };
    ScheduledExecutorService service = Executors
                    .newSingleThreadScheduledExecutor();
    service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
  }
}

좋은 웹페이지 즐겨찾기