Timer 및 TimeTask 소개
4473 단어 java 학습
Timer는 향후 백그라운드 스레드에서 수행될 작업을 예약하는 스레드 시설입니다.작업을 한 번 예약하거나 정기적으로 반복할 수 있으며 타이머로 보고 TimerTask를 스케줄링할 수 있습니다.TimerTask는 추상적인 클래스로 Runnable 인터페이스를 실현했기 때문에 다중 스레드 능력을 갖추었다.
import java.util.TimerTask;
public class MyTask extends TimerTask{
private int id;
public MyTask(int id){
this.id = id;
}
public void run(){
System.out.println(" " + id + ": ");
//System.gc();
}
}
그런 다음 기본 프로그램 코드는 다음과 같습니다.
import java.util.Date;
import java.util.Timer;
public class Test{
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new MyTask(1), 5000);// 5
MyTask secondTask = new MyTask(2);
timer.schedule(secondTask, 1000, 3000);
// 1 , 3
Date date = new Date();
timer.schedule(new MyTask(3), new Date(date.getTime() + 1000));
// date ,
// timer.cancel();
// secondTask.cancel();
System.out.println("main thread !");
}
}
Timer에는 4개의 schedule 재부팅 함수와 2개의 schedule AtFixedRate가 있습니다.
scheduleAtFixedRate를 사용하면 Timer는 가능한 한 작업이 고정된 주파수에서 실행될 수 있도록 합니다.
예를 들어 위의 예에서secondTask를 1초 후에 3초에 한 번씩 실행하도록 했지만 자바는 실시간이 아니기 때문에 우리가 지난 프로그램에서 표현한 원뜻은 엄격하게 집행할 수 없다. 예를 들어 자원 스케줄이 4초 긴장된 후에야 다음을 집행할 수도 있고 3.5초 후에 집행할 수도 있다.
만약 우리가 schedule AtFixedRate를 호출한다면, Timer는 가능한 한 당신의 secondTask 실행 빈도를 3초에 한 번씩 유지하도록 할 것입니다.
위의 프로그램을 실행하고 schedule AtFixed Rate를 사용한다고 가정하면 다음 장면은 가능하다. 1초 후에 SecondTask가 한 번 실행된다. 시스템이 바쁘기 때문에 3.5초 후에 SecondTask가 두 번째 실행을 할 수 있다. 그리고 Timer는 이 지연을 기록하고 다음 작업에서 이 지연을 메우려고 시도한다. 그러면 2.5초 후에 SecondTask가 세 번 실행될 것이다.'일정한 지연 시간이 아니라 고정된 주파수로 임무를 수행한다' 는 뜻이다.
Timer 종료 문제: 기본적으로 프로그램의 Timer 루틴이 실행되면 이 프로그램은 실행을 유지합니다.다음 3가지 방법으로 timer 스레드를 종료할 수 있습니다.
(1)timer의 cancle 방법을 호출합니다.프로그램의 어느 곳에서든 이 방법을 호출할 수 있으며, 심지어timer task의run 방법에서도 호출할 수 있다.
(2)timer 라인을 하나의 데몬 라인으로 만들 수 있다. (timer를 만들 때 new Timer(true)를 사용하여 이 위치에 도달할 수 있다. 그러면 프로그램이 데몬 라인만 있을 때 자동으로 실행을 중지한다.
(3) System을 호출합니다.exit 방법으로 전체 프로그램 (모든 라인) 을 종료합니다.TimerTask 에도 cancel 메서드가 있습니다.
위에서 말한 "한 프로그램의timer 라인이 실행된다면 이 프로그램은 실행을 유지할 것이다."반대로 Timer의 모든 TimerTask가 실행되면 전체 프로그램이 종료됩니까? 테스트 답안은 부정적입니다. 예를 들어 위의 테스트 코드와 첫 번째 TimerTask만 Timer에서 실행된다면:
timer.schedule(new MyTask(1), 5000);// 5
그러면 5초 후에도 사실 전체 프로그램이 종료되지 않았습니다. Timer는 쓰레기 수거를 기다릴 때 회수되고 프로그램이 종료될 수 있습니다. 그런데 얼마나 걸릴까요?TimerTask의run 함수가 실행된 후에 System을 추가합니다.gc();됐어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 기본 파일 삭제전재:https://blog.csdn.net/zy332719794/article/details/80164205 반복 삭제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.