번역가의 노트 : 개인적으로 쓰레기 수집을 실행하는 것이 좋은 예가 아니라고 생각합니다. 데이터, 파일 등
이 기사에서는 3 가지 구현 방법을 소개합니다.
1. 일반 스레드 구현
2. Timertask 구현
3. ScheduleDexecutorService 구현
1. 일반 스레드
이것은 가장 일반적인 것입니다. 그런 다음 스레드를 만들고 while 루프로 실행하고 수면 방법을 사용하여 타이밍 작업의 효과를 달성합니다. 이것은 빠르고 쉽게 구현할 수 있으며 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
공개 클래스 작업 1 {
public static void main (String [] args) {
// 1 초 만에 실행됩니다
최종 긴 TimeInterval = 1000;
runnable runnable = new Runnable () {
public void run () {
while (true) {
// -------- 작업 실행을위한 코드
System.out.println ( "Hello !!");
// --------- 여기서 끝납니다
노력하다 {
Thread.Sleep (TimeInterval);
} catch (InterruptedException e) {
e.printstacktrace ();
}
}
}
};
스레드 스레드 = 새 스레드 (runnable);
thread.start ();
}
}
2. 타이머와 타이머 스탁을 사용하십시오
위의 구현은 매우 빠르고 쉽지만 기능이 부족합니다.
위의 방법과 비교하여 타이머와 타이머 스탁 사용은 다음과 같은 이점이 있습니다.
1. 작업을 시작하고 취소 할 때 제어됩니다
2. 처음으로 작업을 실행할 때 원하는 지연 시간을 지정할 수 있습니다.
구현하는 동안 타이머 클래스는 작업을 예약 할 수 있으며 Timertask는 run () 메소드의 특정 작업을 구현합니다.
타이머 인스턴스는 멀티 태스킹을 예약 할 수 있으며 스레드 안전입니다.
타이머의 생성자가 호출되면 작업을 예약하는 데 사용할 수있는 스레드를 만듭니다.
코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
java.util.timer 가져 오기;
java.util.timertask 가져 오기;
공개 수업 task2 {
public static void main (String [] args) {
Timertask Task = New Timertask () {
@보수
public void run () {
// 실행하는 작업이 여기로갑니다
System.out.println ( "Hello !!!");
}
};
타이머 타이머 = 새로운 타이머 ();
긴 지연 = 0;
긴 기간 = 1 * 1000;
// 작업을 간격으로 실행할 예정입니다.
TIMER.SCHEDUEATFIXEDRATE (작업, 지연,
integerperiod);
} // 메인 끝
}
이 클래스는 JDK 1.3 이후에 존재합니다.
3. ScheduleDexecutorService
ScheduleDexecutorService는 Java SE 5 java.util.concurrent의 동시 공구 클래스로 소개되었습니다.
위의 두 가지 방법과 비교하여 다음과 같은 이점이 있습니다.
1. 타이머의 단일 스레드와 비교하여 스레드 풀을 통해 작업을 실행합니다.
2. 첫 번째 작업 실행의 지연 시간을 설정할 수 있습니다.
3. 실행 시간 간격을 설정하기위한 좋은 계약 제공
다음은 구현 코드입니다. ScheduleDexecutorService#ScheduLeatFixEdrate를 통해이 예제를 보여줍니다.
코드 사본은 다음과 같습니다.
java.util.concurrent.executors import;
import java.util.concurrent.scheduledExecutorService;
java.util.concurrent.timeUnit import;
공개 수업 task3 {
public static void main (String [] args) {
runnable runnable = new Runnable () {
public void run () {
// 실행하는 작업이 여기로갑니다
System.out.println ( "Hello !!");
}
};
ScheduleDexecutorService Service = 집행자
.NewsingLethreadScheduledExecutor ();
Service.scheduleatfixedrate (runnable, 0, 1, timeUnit.seconds);
}
}