>  기사  >  Java  >  Java의 타이머 및 예약된 작업의 예

Java의 타이머 및 예약된 작업의 예

Y2J
Y2J원래의
2017-05-16 09:55:591831검색

이 글은 주로 Java에서 Timer와 TimerTask 타이머 및 예약된 작업의 예를 소개합니다. 필요한 친구들이 참고할 수 있어 매우 유용합니다.

이 두 클래스는 사용하기 매우 편리합니다. 타이머에 대한 대부분의 요구 사항을 충족합니다.

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() 메서드를 실행하고 "————"를 인쇄
계속 반복됩니다
콘솔에 s 문자가 입력되면 타이머가 작업을 취소합니다
전체 루프에서 빠져나옵니다
프로그램이 실행됩니다. Finish!

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() 메서드는 API1.6.0에 다음과 같이 정의됩니다.

지정된 작업이 지정된 시간에 반복을 시작하도록 예약합니다. 고정 금리 실행. 후속 실행은 지정된 기간으로 구분된 대략 고정된 간격으로 발생합니다.

대략 고정된 간격은 고정 속도 실행에서 각 실행이 예약된 초기 실행 시간을 기준으로 예약된다는 의미입니다. 어떤 이유로든(예: 가비지 수집 또는 기타 백그라운드 활동) 실행이 지연되는 경우 두 개 이상의 실행이 빠르게 연속해서 발생하여 후속 실행이 따라잡을 수 있습니다.

Timer 클래스에서 일반적으로 사용되는 기타 메소드:

cancel()

이 타이머를 종료하여 현재 예약된 모든 작업을 삭제합니다.

purge()

이 타이머의 작업 대기열에서 취소된 작업을 모두 제거합니다.

schedule(TimerTask 작업, 날짜 시간)

지정된 시간에 지정된 작업이 실행되도록 예약합니다.

TimerTask 클래스에서 일반적으로 사용되는 기타 메서드:

cancel()

이 타이머 작업을 취소합니다.

run()

이 타이머 작업에서 수행할 작업입니다.

scheduledExecutionTime()

이 작업의 가장 최근 실제 실행의 예약된 실행 시간을 반환합니다.

【관련 추천사항】

1. 특별 추천: "php Programmer Toolbox" V0.1 버전 다운로드

2. Java 무료 동영상 튜토리얼

3. JAVA 튜토리얼 매뉴얼

위 내용은 Java의 타이머 및 예약된 작업의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.