이 두 클래스는 사용하기 매우 편리하며 타이머에 대한 대부분의 요구 사항을 충족할 수 있습니다.
Timer 클래스는 작업을 수행하는 데 사용되는 클래스로 TimerTask를 매개 변수로 받습니다.
타이머에는 작업 실행을 위한 두 가지 모드가 있는데, 가장 일반적으로 사용되는 것은 두 가지 방법으로 작업을 실행할 수 있는 스케줄입니다: 1: 특정 시간(데이터), 2: 고정 시간 후(int 지연) 이 두 가지 방법 모두를 지정할 수 있습니다. 작업 실행 빈도
TimerTest.Java
package com.cn; import java.io.IOException; import java.util.Timer; public class TimerTest{ public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒执行一次,如果传递一个Data参数,就可以在某个固定的时间执行这个任务. while(true){//这个是用来停止此任务的,否则就一直循环执行此任务 try{ int in = System.in.read(); if(in == 's'){ timer.cancel();//使用这个方法退出任务 break; } } catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask{ public void run(){ System.out.println("________"); } } }
이런 유형의 런타임:
프로그램 시작 후 1초 후에 콘솔에 "—"를 인쇄합니다. —”
2초 간격 후 MyTask의 run() 메소드를 실행하여 “————”를 인쇄합니다
계속 반복됩니다
콘솔의 문자가 나타나면 타이머가 작업을 취소합니다
전체 루프에서 점프
프로그램이 종료됩니다!
TimerTest2.java:
package com.cn; import java.io.IOException; import java.util.Date; import java.util.Timer; public class TimerTest2{ public static void main(String[] args){ Timer timer = new Timer(); MyTask myTask1 = new MyTask(); MyTask myTask2 = new MyTask(); myTask2.setInfo("myTask-info-2"); timer.schedule(myTask1, 1000, 2000); //任务1 一秒钟后执行,每两秒执行一次。 timer.scheduleAtFixedRate(myTask2, 2000, 3000); //任务2 2秒后开始进行重复的固定速率执行(3秒钟重复一次) while (true){ try{ //用来接收键盘输入的字符串 byte[] info = new byte[1024]; int len = System.in.read(info); String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息 if (strInfo.charAt(strInfo.length() - 1) == ' '){ strInfo = strInfo.substring(0, strInfo.length() - 2); } if (strInfo.startsWith("Cancel-1")){ myTask1.cancel();//退出任务1 // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到 // myTask2的状态,所以,这里不能做出是否退出循环的判断. } else if (strInfo.startsWith("Cancel-2")){ myTask2.cancel(); //退出任务2 } else if (strInfo.startsWith("Cancel-All")){ timer.cancel();//退出Timer break; } else{ // 只对myTask1作出判断,偷个懒^_^ myTask1.setInfo(strInfo); } } catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask{ String info = "INFO"; @Override public void run(){ // TODO Auto-generated method stub System.out.println(new Date() + " " + info); } public String getInfo(){ return info; } public void setInfo(String info){ this.info = info; } } }
이 클래스는 두 개의 예약된 작업 mytask1 및 mytask2를 생성합니다
mytask1 작업은 위 TimerTest 클래스의 예시와 동일하게 사용됩니다. 즉, 지정된 작업은 지정된 지연부터 반복적으로 시작하여 고정된 지연으로 실행되도록 예약됩니다.
mytask2 작업은 위의 사용법과 다릅니다. 타이머의 ScheduleAtFixedRate() 메서드를 사용하여 타이머.scheduleAtFixedRate가 실행됩니다.
scheduleAtFixedRate() 메서드는 API 1.6.0에서 다음과 같이 정의됩니다.
지정된 시간에 반복 고정 속도 실행을 시작하도록 지정된 작업을 예약합니다. 후속 실행은 지정된 기간으로 구분된 대략 고정된 간격으로 발생합니다.
대략 고정된 간격은 고정 속도 실행에서 각 실행이 예약된 초기 실행 시간을 기준으로 예약된다는 의미입니다. 어떤 이유로든(예: 가비지 수집 또는 기타 백그라운드 활동) 실행이 지연되는 경우 두 개 이상의 실행이 빠르게 연속해서 발생하여 후속 실행이 따라잡을 수 있습니다.
Timer 클래스의 기타 일반적으로 사용되는 메서드:
cancel()
이 타이머를 종료하고 삭제합니다. 현재 예약된 모든 작업.
purge()
이 타이머의 작업 대기열에서 취소된 모든 작업을 제거합니다.
schedule(TimerTask 작업, 날짜 시간)
지정된 시간에 지정된 작업이 실행되도록 예약합니다.
TimerTask 클래스에서 일반적으로 사용되는 기타 메서드:
cancel()
이 타이머 작업을 취소합니다.
run()
이 타이머 작업에서 수행할 작업입니다.
scheduledExecutionTime()
이 작업의 가장 최근 실제 실행의 예약된 실행 시간을 반환합니다.
Java에서 타이머 및 예약된 작업의 Timer 및 TimerTask 사용에 대한 더 많은 예를 보려면 PHP 중국어 웹사이트에 주목하세요!