자바 타이머 문제 인 스 턴 스 분석

3496 단어
타이머 문제
타 이 머 는 기본 적 인 기본 구성 요소 에 속 합 니 다. 사용자 공간의 프로그램 개발 이 든 커 널 공간의 프로그램 개발 이 든 타 이 머 를 기본 구성 요소 로 지원 해 야 할 때 가 많 습 니 다.타이머 의 실현 은 다음 과 같은 네 가지 기본 적 인 행 위 를 가 져 야 한다. 타이머 추가, 타이머 취소, 타이머 검사, 만 료 실행.
타 이 머 를 설계 하고 다음 과 같은 세 가지 기본 행 위 를 실현 하 십시오. 함수 원형 이 제시 되 었 고 임의의 프로 그래 밍 언어 로 데이터 구 조 를 설계 하고 실현 할 수 있 으 며 가능 한 한 대량의 타 이 머 를 효율적으로 지원 할 수 있 습 니 다.
       // 타이머 추가: 특정 시간 간격 을 거 쳐 목표 작업 을 수행 합 니 다.
/ / 입력 1: Interval 타이머 시간, 단위 ms
/ / 입력 2: ExpiryAction 목표 조작
/ / 복귀: 타이머 Id
  StartTimer(Interval, ExpiryAction) -> TimerId
/ / 타이머 취소
/ / 입력: 타이머 Id
  StopTimer(TimerId)
/ / 타이머 검사
/ / 시스템 은 10ms 마다 이 함 수 를 호출 합 니 다.
  PerTickBookkeeping()
할 말 이 많 지 않 으 니 코드 를 직접 입력 하 세 요.
  1)Timer.java:

import java.util.ArrayList;
public class Timer {
 private long interval; //      ,   ms
 private String expiryAction; //     
 private int timerId; //    Id
 private long waitTime; //         
 //     
 public Timer(){
  this.waitTime = 0;
 } 
 //      
 public int StartTimer(long interval, String expiryAction, int id){
  this.interval = interval;
  this.expiryAction = expiryAction;
  this.timerId = id;
  return timerId;
 } 
 //      
 public void StopTimer(int timerId, ArrayList timer){
  timer.remove(timerId);
 }
 //      
 public void PerTickBookkeeping(){
  if (this.interval > this.waitTime)
   this.waitTime += 10;
  else{
   System.out.println("   "+this.timerId+":"+this.expiryAction);
   this.waitTime = 0;
  }
 }
 public long getInterval() {
  return interval;
 }
 public void setInterval(long interval) {
  this.interval = interval;
 }
 public String getExpiryAction() {
  return expiryAction;
 }
 public void setExpiryAction(String expiryAction) {
  this.expiryAction = expiryAction;
 }
 public int getTimerId() {
  return timerId;
 }
 public void setTimerId(int timerId) {
  this.timerId = timerId;
 }
 public long getWaitTime() {
  return waitTime;
 }
 public void setWaitTime(long waitTime) {
  this.waitTime = waitTime;
 }
}

  2)DoTimer.java:

import java.util.ArrayList;
import java.util.Iterator;
public class DoTimer extends Thread {
 private static ArrayList timerList;
 public static void main(String[] args){
  timerList = new ArrayList();
  Timer timer1 = new Timer();
  timer1.StartTimer(3000, "        ,  3 ", 0);
  Timer timer2 = new Timer();
  timer2.StartTimer(4000, "        ,  4 ", 1);
  timerList.add(timer1);
  timerList.add(timer2);  
  //public void run(){}
  new Thread(){
   @Override
   public void run() {
    while(true){
     Iterator it = timerList.iterator();
     while(it.hasNext()){
      it.next().PerTickBookkeeping();
     }
     try {
      sleep(10);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   }
  }.start();
  timer1.StopTimer(timer1.getTimerId(), timerList);
 }
}

이 글 이 당신 에 게 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기